【问题标题】:Python Compare two specific dictionariesPython比较两个特定的字典
【发布时间】:2019-01-21 09:01:09
【问题描述】:

我想比较两个特定的词典:

dict1 = {"person1": {
      "name": "toto",
      "age": 24
    }, 
    "person2": {
      "name": "titi",
      "age": 24}
    }

dict2 = {"person2": {
      "name": "tata",
      "age": 22
    }, 
    "person3": {
      "name": "tete",
      "age": 25}
    }

我想比较两者之间的区别: - person1,person2 (dict1) 和 person2, person3 (dict2) - 如果person2相同,比较name和age是否相同

我已经比较了第一个键,但第二个键值没有。

dict1 是真正的字典:

def not_matches(dict_one, dict_two):
    dict_one = set(dict_one)
    dict_two = set(dict_two)
    ldel, ladd = list(dict_two - dict_one), list(dict_one - dict_two)
    return ldel, ladd

list_delete = list()
list_add = list()

list_delete, list_add = not_matches(dict1, dict2)
print(list_delete)
print(list_add)

['person3']
['person1']

【问题讨论】:

  • 人的顺序重要吗?
  • 您能否也向我们展示您的代码,以便我们找出什么不起作用?由于您已经比较了第一个键,因此您走在了正确的轨道上。
  • 这不是定义字典的正确语法。你需要{} 围绕整个字典。
  • 我更新了帖子:)

标签: python list dictionary compare


【解决方案1】:

试试这个方法:

for k1, v1 in dict1.items():
  v2 = dict2.get(k1, None)
  if v2:
    print(k1, '---- found:')
    print(v1['name'], v2['name'])
    print(v1['age'], v2['age'])

添加自定义以比较嵌套键。


为了比较主键,可以使用 set 类:
keys1 = set(dict1.keys())
keys2 = set(dict2.keys())

print(keys1 - keys2) #=> {'person1'}
print(keys2 - keys1) #=> {'person3'}
print(keys1 & keys2) #=> {'person2'}

所以上面的代码可以改成:

for k in keys2 & keys1:
  d1, d2 = dict1[k], dict2[k]
  print ( (d1['name'] == d2['name']) & (d1['age'] == d2['age']))

【讨论】:

  • 谢谢,它给了我名字和年龄的区别,但我也想给我人名的区别
  • 如果字典之间有交集,它会根据需要比较'name'和'age'。如果您更改为 print(k1, '---- found:') 您将获得在字典之间共享的人。您可以设置keys1 = set(dict1.keys())和keys2 = set(dict2.keys()),然后使用设置方法比较主键。但我不清楚你想如何呈现最终结果。
  • 我进行了编辑。我不知道我是否明白这一点。或者,也许您可​​以展示预期的结果。
  • 你的算法显示所有键,但我只想显示第一个算法的差异
  • 我修复了:if v2 and (v1['name] != v2['name'] or v1['age'] != v2['age']):跨度>
猜你喜欢
  • 2019-04-23
  • 2021-05-26
  • 1970-01-01
  • 1970-01-01
  • 2017-09-04
  • 1970-01-01
  • 2022-12-18
  • 2014-07-29
  • 1970-01-01
相关资源
最近更新 更多