酒量大的充电器 · 这就是小说中走出的鲜衣怒马少年郎!剑眉星目! ...· 2 月前 · |
威武的单杠 · 电影库,影片搜索,影评排行,票房排行_新浪娱 ...· 1 年前 · |
长情的大熊猫 · 苹果和安卓版Monitor+ ...· 1 年前 · |
年轻有为的冰淇淋 · Translate Tab for ...· 1 年前 · |
任性的盒饭 · 《绿色地狱》百度云盘下载[MP4/mkv]蓝 ...· 1 年前 · |
我有两本字典,但为了简化起见,我将使用这两本:
>>> x = dict(a=1, b=2)
>>> y = dict(a=2, b=2)
现在,我想比较一下
x
中的每个
key, value
对在
y
中是否具有相同的相应值。所以我写了这个:
>>> for x_values, y_values in zip(x.iteritems(), y.iteritems()):
if x_values == y_values:
print 'Ok', x_values, y_values
else:
print 'Not', x_values, y_values
它的工作原理是返回一个
tuple
,然后比较它的相等性。
我的问题:
这是正确的吗?有没有更好的方法来做这件事?最好不要在速度上,我说的是代码的优雅。
更新:我忘记提到我必须检查有多少个
key, value
对是相等的。
发布于 2010-12-25 03:17:26
如果您想知道两个字典中有多少值匹配,您应该这样说:)
可能是这样的:
shared_items = {k: x[k] for k in x if k in y and x[k] == y[k]}
print len(shared_items)
发布于 2010-12-25 03:11:54
您想要做的只是
x==y
您可能正在比较
[('b',1), ('a',1)]
和
[('a',1),('b',1)]
(相同的字典,不同的顺序)。
例如,请参阅以下内容:
>>> x = dict(a=2, b=2,c=3, d=4)
{'a': 2, 'c': 3, 'b': 2, 'd': 4}
>>> y = dict(b=2,c=3, d=4)
{'c': 3, 'b': 2, 'd': 4}
>>> zip(x.iteritems(), y.iteritems())
[(('a', 2), ('c', 3)), (('c', 3), ('b', 2)), (('b', 2), ('d', 4))]
虽然只有一项不同,但算法会发现所有项都是不同的
发布于 2013-09-18 06:02:10
def dict_compare(d1, d2):
d1_keys = set(d1.keys())
d2_keys = set(d2.keys())
shared_keys = d1_keys.intersection(d2_keys)
added = d1_keys - d2_keys
removed = d2_keys - d1_keys
modified = {o : (d1[o], d2[o]) for o in shared_keys if d1[o] != d2[o]}
威武的单杠 · 电影库,影片搜索,影评排行,票房排行_新浪娱乐_新浪网 1 年前 |