Python 根据特定标准比较两个dict_值的值
我有两个字典,我想根据某些标准比较它们的dict_值,比如它们各自dict_值的索引0和索引2处的值必须相同才能认为相等 此代码适用于:Python 根据特定标准比较两个dict_值的值,python,Python,我有两个字典,我想根据某些标准比较它们的dict_值,比如它们各自dict_值的索引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]:
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')
有没有一种更短/更有效的方法
提前谢谢
John我不确定这是否更好,但以下方法应该有效:
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,我使用next
和iter
获取字典中的第一个元组
当然,更好的解决方案是更改数据结构,这样您就不会经常处理只有一项的词典。没有太大区别,我发现的唯一优化是 a_tuple=a.values()[0] b_tuple=b.values()[0]
实际上,dict.values只提供元组。您正在将其转换为list,然后再转换为tuple为什么要这样做?基于字典中的第一个值进行比较(就像你正在做的那样)是可疑的,因为字典中确实没有第一个值(它们是无序的)当然,如果它们只有一个元素,那么效果会很好(因为一个无序的1个元素集合有一个定义良好的顺序——奇怪……),但是如果在dict中有多个元素,那么它可能不起作用。例如,继承的遗留代码,dict_值中只有一个元素用于比较。如果使用python3,你需要将它转换成其他类型。我每天都在尝试学习一些东西(在我尝试之前,我不知道
iter
是否能工作)。@JohnX——还要注意next(iter(a.values())
也能在python2上工作,它可能比索引效率低,但可能值得用来摆脱愚蠢的if-else
子句。