Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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中每个都有不同的值_Python_Sorting_Dictionary_Python 3.7 - Fatal编程技术网

比较四个字典,发现它们的键相同,但在python中每个都有不同的值

比较四个字典,发现它们的键相同,但在python中每个都有不同的值,python,sorting,dictionary,python-3.7,Python,Sorting,Dictionary,Python 3.7,我有四本字典,如下所示,我想按第一个值的顺序打印它们,如果它们相等,则按第二个值的顺序打印它们,但我想不出一种方法。我曾尝试将“p”的所有值放入一个列表中并对列表进行排序,但还是找不到一种方法来调用哪个值对应哪个字典 a = {'p':10, 'w':3} b = {'p':2, 'w':0} c = {'p':3, 'w':0} d = {'p':3, 'w':1} 输出应如下所示: {'p':10, 'w':3} {'p':3, 'w':1} {'p':3, 'w':0} {'p':2,

我有四本字典,如下所示,我想按第一个值的顺序打印它们,如果它们相等,则按第二个值的顺序打印它们,但我想不出一种方法。我曾尝试将“p”的所有值放入一个列表中并对列表进行排序,但还是找不到一种方法来调用哪个值对应哪个字典

a = {'p':10, 'w':3}
b = {'p':2, 'w':0}
c = {'p':3, 'w':0}
d = {'p':3, 'w':1}
输出应如下所示:

{'p':10, 'w':3}
{'p':3, 'w':1}
{'p':3, 'w':0}
{'p':2, 'w':0}

使用sort函数的键参数。下面是问题的解决方案(请注意,反向操作可确保首先显示最大值)


使用
参数对
排序
获取自定义排序顺序

a = {'p':10, 'w':3}
b = {'p':2, 'w':0}
c = {'p':3, 'w':0}
d = {'p':3, 'w':1}

dicts = [a,b,c,d]

print(sorted(dicts, reverse=True, key=lambda d: (d['p'], d['w'])))
对于每个dict,
p
值和
w
值的元组,它给出了所需的排序顺序

输出:

[{'p': 10, 'w': 3}, {'p': 3, 'w': 1}, {'p': 3, 'w': 0}, {'p': 2, 'w': 0}]

您还可以使用
操作符.itemgetter('p','w')
代替lambda,例如,
导入操作符作为op;已排序(dicts,reverse=True,key=op.itemgetter('p','w'))
[{'p': 10, 'w': 3}, {'p': 3, 'w': 1}, {'p': 3, 'w': 0}, {'p': 2, 'w': 0}]