基于特定标准比较两个dict_values的值

时间:2012-07-20 19:16:47

标签: python

我有两个词典我喜欢根据某些标准来比较他们的dict_values,比如说他们各自的dict_values上的索引0和2的值必须相同才算得相等。

此代码有效:

a = dict()
b = dict()
a[1,3] = 5, 6, 7
b[1,4] = 5, 9, 7
a_tuple = (list(a.values()))[0]
b_tuple = (list(b.values()))[0]
if a_tuple[0] == b_tuple[0] and a_tuple[2] == b_tuple[2]:
   print('Equal')

有更短/更有效的方法吗?。

提前致谢!

约翰

2 个答案:

答案 0 :(得分:1)

我不确定这是否更好,但以下情况应该有效:

import operator
import sys

py3k = sys.version_info[0] > 2

a = dict()
b = dict()
a[1,3] = 5, 6, 7
b[1,4] = 5, 9, 7

if(py3k):
  a_tuple = next(iter(a.values()))
  b_tuple = next(iter(b.values()))
else:
  a_tuple = a.values()[0]
  b_tuple = b.values()[0]

cmp_key=operator.itemgetter(0,2)
if cmp_key(a_tuple) == cmp_key(b_tuple):
  print('Equal')

比较更干净,如果使用python 3,我使用nextiter来获取字典中的第一个元组。

当然,更好的解决方案是更改数据结构,这样您就不会经常处理只有一个项目的字典。

答案 1 :(得分:0)

没有太大的区别,只有我发现的优化 a_tuple = a.values()[0] b_tuple = b.values()[0]

实际上dict.values只给你元组。你正在将它列入列表,然后再次转向元组