x10*_*084 4 python dictionary python-3.x
我有两个list
s dict
,一个是另一个的修改子集。我想基于两个键来获取list_one
未出现在 中的元素list_two
。例子:
list_one = [{'name': 'alf', 'age': 25},
{'name': 'alf', 'age': 50},
{'name': 'cid', 'age': 30}]
list_two = [{'name': 'alf', 'age': 25, 'hair_color': 'brown'},
{'name': 'cid', 'age': 30, 'hair_color': 'black'}]
desired_list = [{'name': 'alf', 'age': 50}]
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?我有一种感觉,它与某种list
comprehension
,例如:
desired_list = [x for x in list_one if x['name'] != x2['name'] and x['age'] != x2['age']
for all x2 in list_two]
Run Code Online (Sandbox Code Playgroud)
我认为这很容易通过以下两种理解来完成:
have_2 = {(d['name'], d['age']) for d in list_two}
extra = [d for d in list_one if (d['name'], d['age']) not in have_2]
Run Code Online (Sandbox Code Playgroud)
这首先创建一个我们已经拥有set
的tuple
s,然后检查哪些dict
s 与这些现有键中的任何一个都不匹配。
list_one = [{'name': 'alf', 'age': 25},
{'name': 'alf', 'age': 50},
{'name': 'cid', 'age': 30}]
list_two = [{'name': 'alf', 'age': 25, 'hair_color': 'brown'},
{'name': 'cid', 'age': 30, 'hair_color': 'black'}]
have_2 = {(d['name'], d['age']) for d in list_two}
extra = [d for d in list_one if (d['name'], d['age']) not in have_2]
print(extra)
Run Code Online (Sandbox Code Playgroud)
[{'name': 'alf', 'age': 50}]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1670 次 |
最近记录: |