0

我有两个字典,我想根据某些标准比较它们的 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')

有没有更短/更有效的方法来做到这一点?

提前致谢!

约翰

4

2 回答 2

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 ,我使用nextand来获取字典中的第一个元组。iter

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

于 2012-07-20T19:34:49.597 回答
0

差别不大,我发现的唯一优化是 a_tuple = a.values()[0] b_tuple = b.values()[0]

实际上 dict.values 只给你元组。您正在将其转换为列表,然后再转换为元组

于 2012-07-20T19:35:50.263 回答