vin*_*man 3 python dictionary list
我有两个字典列表,解释某人和他们的角色,例如,下面的 L1 显示在其角色中由 D 指示的驱动程序,而 L2 在其角色中显示由 P 指示的包装工:
L1 = [
{'D': 'Jim Jones'},
{'D': 'Tom Jones'},
{'D': 'Bob Jones'}
]
L2 = [
{'P': 'Jim Jones'},
{'P': 'Bob Jones'}
]
Run Code Online (Sandbox Code Playgroud)
我想合并字典列表,以便键是其角色的合并键,例如:
L3 = [
{'DP': 'Jim Jones'},
{'D': 'Tom Jones'},
{'DP': 'Bob Jones'}
]
Run Code Online (Sandbox Code Playgroud)
顺序无关紧要,这可能是一个新列表,也可以就地完成
这应该可以完成工作:
>>> scratch = {v : k for d in L1 for k, v in d.items()}
>>> for d in L2:
for k, v in d.items():
if v not in scratch:
scratch['v'] = ''
scratch[v] += k
>>> result = [{v: k} for k, v in scratch.items()]
>>> result
[{'DP': 'Jim Jones'}, {'D': 'Tom Jones'}, {'DP': 'Bob Jones'}]
Run Code Online (Sandbox Code Playgroud)
这是它在做什么:
步骤1)以名称为关键字构建一个临时字典:
scratch = {'Jim Jones': 'D', 'Tom Jones': 'D', 'Bob Jones': 'D'}
Run Code Online (Sandbox Code Playgroud)
步骤 2)循环L2 中的名称,然后在scratch 中查找名称并更新其值。
scratch['Jim Jones'] += 'P'
Run Code Online (Sandbox Code Playgroud)
步骤 3)将临时字典转回字典列表:
result = [{'DP': 'Jim Jones'}, {'D': 'Tom Jones'}, {'DP': 'Bob Jones'}]
Run Code Online (Sandbox Code Playgroud)
解决问题的关键
核心思想是名称应该是单个字典中的键。这使得查找和更新变得容易。
希望这可以帮助 :-)
| 归档时间: |
|
| 查看次数: |
61 次 |
| 最近记录: |