0
我想比較的元組的兩個列表,並創建一個元組的第三列表,其中包含兩個最高值:建立的元組的第三名單有兩個來源
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 ='開頭的邏輯來獲得這個工作,但它不再適合我目前的情況。
所需的輸出應該是這樣的(前兩個元組,「事件ID」和「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'或其子集相同的內容。它永遠不會包含額外的元組項目。
任何人都可以用我需要的邏輯來完成我的代碼嗎?
由於元組這一下真像鍵值對
是否有您所使用的元組的列表,而不是一本字典的理由(如果訂單對你來說很重要,可能是'OrderedDict')? – DSM 2015-02-08 23:11:00
@DSM是的,因爲元組列表是通過壓縮它們從兩個列表創建的。 – gdogg371 2015-02-08 23:12:32
這並沒有真正解釋它,因爲除非你有一個重複的「關鍵」,或者關心順序,否則你可以輕鬆地完成'dict(zip(list0,list1))'。字典有一個'.update'方法。 – DSM 2015-02-08 23:15:01