Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据特定标准比较两个dict_值的值_Python - Fatal编程技术网

Python 根据特定标准比较两个dict_值的值

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]:

我有两个字典,我想根据某些标准比较它们的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]:
   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
子句。