gpt4 book ai didi

python-3.x - 从字典中删除值

转载 作者:行者123 更新时间:2023-12-02 22:40:49 24 4
gpt4 key购买 nike

我有一本大字典,如果键以某些值开头,我会尝试从键中删除值。下面是字典的一个小例子。

a_data = {'78567908': {'26.01.17', '02.03.24', '26.01.12', '04.03.03', '01.01.13', '02.03.01', '01.01.10', '26.01.21'}, '85789070': {'26.01.02', '09.01.04', '02.05.04', '02.03.17', '02.05.01'}, '87140110': {'03.15.25', '03.15.24', '03.15.19'}, '87142218': {'26.17.13', '02.11.01', '02.03.22'}, '87006826': {'28.01.03'}}

读完字典后,我想删除所有以“26”开头的键中的值。或“02”。可能会留下没有值的键(空集)。

我确实有有效的代码:

exclude = ('26.', '02.')
f_a_data = {}
for k, v in a_data.items():
f_a_data.setdefault(k,[])
for code in v:
print (k, code, not code.startswith(exclude))
if not code.startswith(exclude):
f_a_data[k].append(code)


print('Filtered dict:')
print(f_a_data)

这将返回一个过滤后的字典:

Filtered dict:
{'78567908': ['04.03.03', '01.01.13', '01.01.10'], '85789070': ['09.01.04'], '87140110': ['03.15.25', '03.15.24', '03.15.19'], '87142218': [], '87006826': ['28.01.03']}

问题 1:这是过滤字典的最佳方式吗?

问题 2:我如何修改上面的代码片段以返回像原始字典一样的集合中的值?

最佳答案

您的代码在复杂性方面相当不错,但可以稍微“Python化”并且仍然保持可读性。

我的建议:您可以使用嵌套理解和 all 重建字典来测试是否应该包含这些值:

a_data = {'78567908': {'26.01.17', '02.03.24', '26.01.12', '04.03.03', '01.01.13', '02.03.01', '01.01.10', '26.01.21'}, '85789070': {'26.01.02', '09.01.04', '02.05.04', '02.03.17', '02.05.01'}, '87140110': {'03.15.25', '03.15.24', '03.15.19'}, '87142218': {'26.17.13', '02.11.01', '02.03.22'}, '87006826': {'28.01.03'}}
exclude = ('26.', '02.')

new_data = {k:{x for x in v if all(s not in x for s in exclude)} for k,v in a_data.items()}

结果:

>>> new_data
{'78567908': {'01.01.10', '01.01.13', '04.03.03'},
'85789070': {'09.01.04'},
'87006826': {'28.01.03'},
'87140110': {'03.15.19', '03.15.25', '03.15.24'},
'87142218': set()}

(这里使用嵌入集合理解的字典理解(因为您需要一个集合),在all中使用生成器理解)

关于python-3.x - 从字典中删除值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53835225/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com