如何在Python中比较两个字典键?

3
我想在Python中比较两个字典键,如果键相等,则打印它们的值。
例如,
dict_one={'12':'fariborz','13':'peter','14':'jadi'}
dict_two={'15':'ronaldo','16':'messi','12':'daei','14':'jafar'}

并且在比较完键值之后,打印输出。
'fariborz', 'daei'
'jadi', jafar'

1
我认为您混淆了键/值的概念。键是左侧的东西,您使用它将其映射到右侧的值。(对于您的示例,数字是键,名称是值)。 - Karl
左侧的文本是键,冒号 [:] 右侧是值。我认为你可能搞反了。 - user13821103
8个回答

4

您可以迭代两个字典的键的交集,并在将它们映射到repr函数后打印两个字典相应的值,这将有助于引用字符串:

for k in dict_one.keys() & dict_two.keys():
    print(','.join(map(repr, (dict_one[k], dict_two[k]))))

这将输出:
'fariborz','daei'
'jadi','jafar'

你可以对dict.keys()执行集合操作吗?我以前从没见过! - Hielke Walinga
是的,根据文档,字典键是类似于集合的对象。这非常方便。 - blhsing

3

您正在请求两个字典的交集。

使用内置类型set

您可以使用内置类型set来实现这一点,它实现了intersection()函数。

您可以像这样将列表转换为集合:

set(my_list)

因此,要查找两个字典键之间的交集,您可以将键转换为集合并找到交集。

获取字典键列表:

dict_one.keys()

因此,要找到两个字典键的交集:

set(dict_one.keys()).intersection(set(dict_two.keys()))

这将返回,以您的示例为例,集合{'12','14'}

以下是更易读的代码:

keys_one = set(dict_one.keys())
keys_two = set(dict_one.keys())
same_keys = keys_one.intersection(keys_two)
# To get a list of the keys:
result = list(same_keys)

使用匿名函数(lambda函数)和列表推导式

另一种解决这个问题的简单方法是使用lambda函数。

我在这里加上它只是为了让你知道。可能不是最有效的方式!

same_keys = lambda first,second: [key1 for key1 in first.keys() if key1 in second.keys()]

因此,为了得到结果:
``` result = same_keys(dict_one,dict_two) ```
以上两种方法都将给出两个字典共同拥有的键。只需遍历并按照您的意愿打印值即可。
for key in result:
    print('{},{}'.format(dict_one[key], dict_two[key]))

2
您可以使用&运算符来查找匹配的键。
for i in d1.keys() & d2.keys():
    print("'{}', '{}'".format(d1[i], d2[i]))
~/python/stack/sept/twenty_2$ python3.7 alice.py
'fariborz', 'daei'
'jadi', 'jafar

0
for key, val1 in dict_one.items():
    val2 = dict_two.get(key)
    if val2 is not None:
        print(val1, val2)

0

遍历一个字典并检查另一个字典中是否存在该键:

dict_one = {'12':'fariborz','13':'peter','14':'jadi'}
dict_two = {'15':'ronaldo','16':'messi','12':'daei','14':'jafar'}

for k in dict_one:
    if k in dict_two:
        print(dict_one[k], dict_two[k])


# fariborz daei
# jadi jafar

0

在Python中,字典非常好用,因为它们允许我们轻松查找键的值,并检查字典中是否存在某个键。

因此,在您的示例中,如果您想打印每当两个字典之间的键相同时的值,您可以像这样做:

dict_one={'12':'fariborz','13':'peter','14':'jadi'}
dict_two={'15':'ronaldo','16':'messi','12':'daei','14':'jafar'}

# Loop through all keys in dict_one
for key in dict_one:
    # Then check if each key exists in dict_two
    if key in dict_two:
        val1 = dict_one[key]
        val2 = dict_two[key]
        print('{},{}'.format(val1, val2))  # print out values with comma between them

0
def compare(dict1,dict2):
  keys1 = dict1.keys()
  keys2 = dict2.keys()
  for key in keys1:
    if key in keys:
      print(dict1[key],dict2[key])

0

使用 intersection().then() 方法,您可以从 dict_one 和 dict_two 中获取相同的键值。

这是我的代码:

dict_one={'12':'fariborz','13':'peter','14':'jadi'}
dict_two={'15':'ronaldo','16':'messi','12':'daei','14':'jafar'}
print([(dict_one[vals],dict_two[vals]) for vals in dict_one.keys() & dict_two.keys()])

输出

 [('fariborz', 'daei'), ('jadi', 'jafar')]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接