Python 3.x 如何使用Python中的键扩展字典中的值
如何使用键作为主要约束条件,从字典列表中扩展字典中的值,例如:Python 3.x 如何使用Python中的键扩展字典中的值,python-3.x,list,dictionary,Python 3.x,List,Dictionary,如何使用键作为主要约束条件,从字典列表中扩展字典中的值,例如: d = {'a': (), 'b': 0, 'c': "", d: ""} l = [ {'a': (23, 48), 'b': 34, 'c': "fame", d: "who"}, {'a': (94, 29), 'b': 3, 'c': "house", d: "cats"}, {'a': (23, 12), 'b': 93, 'c': "imap", d: "stack"}, ] 给予
d = {'a': (), 'b': 0, 'c': "", d: ""}
l = [ {'a': (23, 48), 'b': 34, 'c': "fame", d: "who"},
{'a': (94, 29), 'b': 3, 'c': "house", d: "cats"},
{'a': (23, 12), 'b': 93, 'c': "imap", d: "stack"},
]
给予
d = {'a': [(23, 48), (94,29), 23,12], 'b': [34, 3, 94],
'c': ["fame", "house", "imap"], 'd': ['who', 'cats', 'stack'] }
使用的代码
for i in l:
d["a"].extend(i.get('a')),
d["b"].extend(i.get('b')),
d["c"].extend(i.get('c')),
d['d'].extend(i.get('d'))
由于默认值是一个空列表,因此可以按如下方式使用
defaultdict
最好注意您应该将
d
初始化为空的dict,这样您就可以迭代l
和键值对,以在给定的键处将值添加到d
的子列表中:
l = [
{'a': (23, 48), 'b': 34, 'c': "fame", 'd': "who"},
{'a': (94, 29), 'b': 3, 'c': "house", 'd': "cats"},
{'a': (23, 12), 'b': 93, 'c': "imap", 'd': "stack"},
]
d = {}
for s in l:
for k, v in s.items():
d.setdefault(k, []).append(v)
d
变成:
{'a': [(23, 48), (94, 29), (23, 12)],
'b': [34, 3, 93],
'c': ['fame', 'house', 'imap'],
'd': ['who', 'cats', 'stack']}
{'a': [(23, 48), (94, 29), (23, 12), None],
'b': [34, 3, 93, None],
'c': ['fame', 'house', 'imap', None],
'd': ['who', 'cats', 'stack', None]}
如果l
中的子目录可能包含其他键,则可以将d
初始化为所需键下的空列表目录:
l = [
{'a': (23, 48), 'b': 34, 'c': "fame", 'd': "who"},
{'a': (94, 29), 'b': 3, 'c': "house", 'd': "cats"},
{'a': (23, 12), 'b': 93, 'c': "imap", 'd': "stack"},
{'e': 'choices'}
]
d = {k: [] for k in ('a', 'b', 'c', 'd')}
for s in l:
for k in d:
d[k].append(s.get(k))
在这种情况下,d
变成:
{'a': [(23, 48), (94, 29), (23, 12)],
'b': [34, 3, 93],
'c': ['fame', 'house', 'imap'],
'd': ['who', 'cats', 'stack']}
{'a': [(23, 48), (94, 29), (23, 12), None],
'b': [34, 3, 93, None],
'c': ['fame', 'house', 'imap', None],
'd': ['who', 'cats', 'stack', None]}
请注意,除非输入列表中的子目录包含其他键,否则不需要硬编码键列表。@blhsing是的,但我不确定在他的用例中是否总是这样是的,并且从OP的新注释判断,输入列表中的子目录可能毕竟包含其他键,在这种情况下,对密钥列表进行硬编码确实是一种可行的方法。在一般情况下,在提取某些数据时,对所需内容进行硬编码总是很好的。即使这不是最漂亮的东西,非常感谢,但我想问一下,如果我有下一个dict条目l,{e:'choices},并且想把从a到d的所有其他条目,不包括e,我该怎么办it@optimus你可以看看另一个答案,它会解决你的问题,因为选择的钥匙是硬编码的