【发布时间】:2020-11-09 13:24:59
【问题描述】:
大家好,我有一个 dict id_dict,其中有一些键。在此键中有列表作为值(有时只有一项有时 4)。 (这些是组件的名称)
我的字典 id_dict 是动态创建的,键和值总是会改变。
【问题讨论】:
-
请注意,无论如何,您还会在列表中附加第二个和第三个元素
标签: python list loops dictionary for-loop
大家好,我有一个 dict id_dict,其中有一些键。在此键中有列表作为值(有时只有一项有时 4)。 (这些是组件的名称)
我的字典 id_dict 是动态创建的,键和值总是会改变。
【问题讨论】:
标签: python list loops dictionary for-loop
S = {'G': ['crypto'], 'T': ['update', 'monitor', 'ipforum'], 'F': ['update'], 'M': ['crypto','update']}
R = {}
for key, value_list in S.items():
for value in value_list:
if value not in R:
R[value] = []
R[value].append(key)
print(R)
输出:
{'crypto': ['G', 'M'], 'update': ['T', 'F', 'M'], 'monitor': ['T'], 'ipforum': ['T']}
【讨论】:
R = defaultdict(list)
您实际上是在尝试将您正在迭代的组件列表分配为字典的键,这就是导致错误的原因。 尝试简单地做:
component_dict[component] = id
【讨论】:
也许可以试试:
new_dic = {}
for k, v in dic.items():
for ele in v:
if ele not in new_dic:
new_dic[ele] = []
new_dic[ele].append(k)
new_dic
注意附加
【讨论】:
您似乎调用 components 而不是 component 并且不能是 dict 键,这就是导致错误的原因,
此外,您没有将其设置为列表而只是分配了值,您需要分配一个不存在的列表,如果存在则附加到它
所以:
If dict_components.get(component):
dict_components[component].append(id)
else:
dict_components[component] = [id]
【讨论】:
试试这个
from collections import defaultdict
d = {'G': ['crypto'], 'T': ['update', 'monitor', 'ipforum'], 'F': ['update'], 'M': ['crypto', 'update']}
d1 = defaultdict(list)
for k, v in d.items():
for x in v:
d1[x].append(k)
print(d1)
输出
defaultdict(<class 'list'>, {'crypto': ['G', 'M'], 'update': ['T', 'F', 'M'], 'monitor': ['T'], 'ipforum': ['T']})
【讨论】:
if value not in R: R[value] = []
defaultdict 只是扩展了dict。您可以将其用作任何“常规”字典
d.values() 和它们到s set。最后的集合应该和d1.keys()一样
最简单的方法是使用 collections.defaultdict - 这将使您免于多次测试
from collections import defaultdict
source = {'G': ['crypto'],
'T': ['update', 'monitor', 'ipforum'],
'F': ['update'],
'M': ['crypto','update']}
components = defaultdict(list)
for key, values_list in source.items():
for value in values_list:
components[value].append(key)
结果会是
defaultdict(list,
{'crypto': ['G', 'M'],
'update': ['T', 'F', 'M'],
'monitor': ['T'],
'ipforum': ['T']})
作为替代方案,您可以创建常规 dict 并使用 setdefault 方法创建列表
components = {}
for key, values_list in source.items():
for value in values_list:
components.setdefault(value, []).append(key)
【讨论】: