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

2024-04-28 15:35:12 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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”相同的或其子集。它永远不会包含额外的元组项

有人能帮我完成代码所需的逻辑吗

谢谢


Tags: inidtrue列表for元组secondminute
1条回答
网友
1楼 · 发布于 2024-04-28 15:35:12

在全世界看来,元组列表就像键值对一样,它们需要一个^{}。假设要更新值:

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

相关问题 更多 >