从两个来源构建第三个元组列表

时间:2015-02-08 23:06:07

标签: python list tuples

我试图比较两个元组列表并创建第三个包含两个元组中最高值的元组列表:

b = [(u'eventId', 0), (u'playerId', 0), (u'expandedMinute', 0), \
(u'second', 0), (u'endY', 00.0), (u'teamId', 0), (u'endX', 00.0), (u'y', 00.0), (u'x', 00.0), \
(u'isTouch', 'Null'), (u'id', 0.0), (u'minute', 0)]

c = [(u'expandedMinute', 93), \
 (u'second', 47), (u'endY', 67.8), (u'teamId', 32), (u'endX', 91.0), \
 (u'y', 83.8), (u'x', 88.1), (u'isTouch', True), (u'id', 2136355953.0), \
 (u'minute', 91)]


d={k:c[k] if k in c and c[k]>b[k] else v for k,v in b.items()}
print [(k, v) for k, v in d.items()]

我之前用一对词典做了类似的事情,并且能够使用以'd ='开头的逻辑来使其工作,但它不再适合我目前的情况。

所需的输出应该如下所示(前两个元组,'eventId'和'playerId',它们在b中,但不是c被添加到最终的元组列表中):

[(u'eventId', 0), (u'playerId', 0), (u'expandedMinute', 93), \
 (u'second', 47), (u'endY', 67.8), (u'teamId', 32), (u'endX', 91.0), \
 (u'y', 83.8), (u'x', 88.1), (u'isTouch', True), (u'id', 2136355953.0), \
 (u'minute', 91)]

在我的场景中,'C'只会包含与'B'或其子集相同的内容。它永远不会包含额外的元组项。

任何人都可以帮助我完成我的代码所需的逻辑吗?

由于

1 个答案:

答案 0 :(得分:0)

像元数据对一样向全世界看的元组列表为OrderedDict尖叫。假设您要更新值:

>>> from collections import OrderedDict
>>> bd = OrderedDict(b)
>>> cd = OrderedDict(c)
>>> newd = bd.copy()
>>> newd.update(cd)
>>> newd
OrderedDict([(u'eventId', 0), (u'playerId', 0), (u'expandedMinute', 93), (u'second', 47), (u'endY', 67.8), (u'teamId', 32), (u'endX', 91.0), (u'y', 83.8), (u'x', 88.1), (u'isTouch', True), (u'id', 2136355953.0), (u'minute', 91)])

但是如果你坚持一个元组列表:

>>> print newd.items()
[(u'eventId', 0), (u'playerId', 0), (u'expandedMinute', 93),
 (u'second', 47), (u'endY', 67.8), (u'teamId', 32),
 (u'endX', 91.0), (u'y', 83.8), (u'x', 88.1), 
 (u'isTouch', True), (u'id', 2136355953.0), (u'minute', 91)]