Rah*_*rma 5 python dictionary list-comprehension python-3.x
我有两个字典项目和u_items
items = {"A": 1, "B": 2, "C": 3}
u_items = {"D": 4, "B": 4, "E": 8, "C": 4}
Run Code Online (Sandbox Code Playgroud)
我想用u_items更新项目字典,所以我这样做了
items.update((k + '_1' if k in items else k, v) for k, v in u_items.items())
Run Code Online (Sandbox Code Playgroud)
这样我就可以区分两个字典的键
输出:
items = {'A': 1, 'B': 2, 'C': 3, 'D': 4, 'B_1': 4, 'E': 8, 'C_1': 4}
Run Code Online (Sandbox Code Playgroud)
但是当我用另一个字典更新项目字典时,假设n_items,它将替换B_1的值而不是使其变为B_1_1
n_items = {"C":7, "B":9}
items.update((k + '_1' if k in items else k, v) for k, v in n_items.items())
Run Code Online (Sandbox Code Playgroud)
输出:
{'A': 1, 'B': 2, 'C': 3, 'D': 4, 'B_1': 9, 'E': 8, 'C_1': 7}
Run Code Online (Sandbox Code Playgroud)
但我希望输出是这样的:
{'A': 1, 'B': 2, 'C': 3, 'D': 4, 'B_1': 4, 'E': 8, 'C_1': 4, 'B_1_1':9,'C_1_1':7}
Run Code Online (Sandbox Code Playgroud)
或像这样:
{'A': 1, 'B': 2, 'C': 3, 'D': 4, 'B_1': 4, 'E': 8, 'C_1': 4, 'B_2':9,'C_2':7}
Run Code Online (Sandbox Code Playgroud)
我该怎么做 ?
虽然这看起来有点像XY Problem,但这是一个丑陋的(而且我很确定,效率低下)而且不是非常通用的解决方案,包括:
按照您的要求,通过将“ _1 ”附加到现有键(在一行中完成所有操作)来合并字典,尽管我建议(因为在某些情况下最短不一定是最好的):
Run Code Online (Sandbox Code Playgroud)>>> items = {"A": 1, "B": 2, "C": 3} >>> u_items = {"D": 4, "B": 4, "E": 8, "C": 4} >>> n_items = {"C": 7, "B": 9} >>> >>> items.update((max([k1 + "_1" for k1 in items if k1 == k or k1.startswith(k + "_1")], key=len, default=k), v) for k, v in u_items.items()) >>> items {'A': 1, 'B': 2, 'C': 3, 'D': 4, 'B_1': 4, 'E': 8, 'C_1': 4} >>> >>> items.update((max([k1 + "_1" for k1 in items if k1 == k or k1.startswith(k + "_1")], key=len, default=k), v) for k, v in n_items.items()) >>> items {'A': 1, 'B': 2, 'C': 3, 'D': 4, 'B_1': 4, 'E': 8, 'C_1': 4, 'C_1_1': 7, 'B_1_1': 9} >>> >>> >>> # Merging an additional dictionary ... >>> v_items = {"C": 25} >>> >>> items.update((max([k1 + "_1" for k1 in items if k1 == k or k1.startswith(k + "_1")], key=len, default=k), v) for k, v in v_items.items()) >>> items {'A': 1, 'B': 2, 'C': 3, 'D': 4, 'B_1': 4, 'E': 8, 'C_1': 4, 'C_1_1': 7, 'B_1_1': 9, 'C_1_1_1': 25}
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |