Python:结合两个关于公共值的字典列表



我有两个字典列表。我想要基于的工会

list_1 = ({'foo': 'bar', 'ip': '1.2.3.4'}, {'foo': 'bar2', 'ip': '2.3.4.5'})
list_2 = ({'foo': 'bar3', 'ip': '1.2.3.4'})
#calculated
list_3 should be: ({'foo': 'bar3', 'ip': '1.2.3.4'})

我正在尝试:

tmplist = list(item['ip'] for item in list_1
if item['ip'] in list_2)

编辑:我有一个嵌套的for循环。有没有更像蟒蛇的方式?

for item1 in list1:
print(item1['ip_address'])
for item2 in list2:
if item1['ip_address'] == item2['ip_address']:
print("Got a match: " + item1['foo'] + " == " +item2['foo'])

我已经修正了值&你的问题格式(希望没问题(。在下面使用方法,您可以在字典列表之间找到通用值。

list_1 = [{'foo': 'bar', 'ip': '1.2.3.4'}, {'foo': 'bar2', 'ip': '2.3.4.5'}]
list_2 = [{'foo': 'bar', 'ip': '1.2.3.4'}]
y0_tupleset = set(tuple(sorted(d.items())) for d in list_1)
y1_tupleset = set(tuple(sorted(d.items())) for d in list_2)
y_inter = y0_tupleset.intersection(y1_tupleset)
y_inter_dictlist = [dict(it) for it in list(y_inter)]
print(y_inter_dictlist)

我想你的问题中的list_1list_2是…列表,对吧?(正如您所拥有的,list_1tuplelist_2dict

如果是这种情况,那么在声明列表时必须使用方括号[]而不是括号()

list_1 = [{'foo': 'bar', 'ip': '1.2.3.4'}, {'foo': 'bar2', 'ip': '2.3.4.5'}]
list_2 = [{'foo': 'bar3', 'ip': '1.2.3.4'}]

好的,假设这样,你可以有这样的实现:

def matchings(iter1, iter2, selector):
keys = {*map(selector, iter1)}
return [*filter(lambda e: selector(e) in keys, iter2)]

并像这样使用:

matchings(list_1, list_2, lambda e: e['ip'])
# [{'foo': 'bar3', 'ip': '1.2.3.4'}]

最新更新