gpt4 book ai didi

python - 为什么 dict1.items() <= dict2.items() 和 dict1.viewitems() <= dict2.viewitems() 返回不同的结果?

转载 作者:行者123 更新时间:2023-11-28 21:31:22 26 4
gpt4 key购买 nike

当将两个词典作为列表进行比较时,我很困惑为什么 .items() 返回的结果与 .viewitems() 不同。

# python 2.7
d1 = {'1': '10', '2': '20'} # two key-value pairs
d2 = {'3': '30', '4': '40', '5': '50'} # three key-value pairs
print d1 <= d2 # True
print d1.items() <= d2.items() # True
print d1.viewitems() <= d2.viewitems() # False
print d1.items() # [('1', '10'), ('2', '20')]
print d1.viewitems() # dict_items([('1', '10'), ('2', '20')])

似乎 .items() 和 .viewitems() 之间的主要区别是.items() 返回一个列表,viewitems() 返回一个 dict_items 东西。

是否建议在比较字典之间的大小时只使用 d1 <= d2 而不是 viewitems 或 items?

此外,如何使其与 Python 3 兼容?

最佳答案

d1 <= d2  # True

这很复杂。它是实现细节。参见 What do comparison operators do on dictionaries? TL;DR:在 Python 2.x 中,较短的字典总是比较长的字典小,但在 Python 3.x 中字典根本不可排序。

d1.items() <= d2.items()  # True

这是一个 lexicographical列表的比较。那True结果是可靠的,因为 每个 d1 中的键小于 d2任何键.要使此代码交叉兼容,您必须显式转换为列表。

d1.viewitems() <= d2.viewitems()  # False

这是一个类似子集的检查。那False结果是可靠的,因为d1不是 d2 的“subdict” .要使此代码交叉兼容,请使用 six.viewitems或类似的。

Is it recommended to just use d1 <= d2 rather than viewitems or items when comparing the size between dictionaries?

两者都不是,使用len(d1) <= len(d2)比较字典之间的大小。

关于python - 为什么 dict1.items() <= dict2.items() 和 dict1.viewitems() <= dict2.viewitems() 返回不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58291713/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com