簡體   English   中英

重復列表之間的Python映射

[英]Python mapping between lists for duplicates

我有兩個並行列表,如下所示:

List1 - List2
1 -------- A
1 -------- B
1 -------- C
2 -------- D
2 -------- D
2 -------- D
2 -------- E
2 -------- A
3 -------- A
3 -------- L
3 -------- M

我在python中尋找一種快速的方法來計算列表2中有多少個屬性映射到列表1中的不同屬性。在此示例中,我希望得到一個輸出:

A maps to 1, 2, 3

使用zip()將列表和collections.defaultdict()的值配對,以生成映射:

from collections import defaultdict

mapping = defaultdict(set)
for v1, v2 in zip(List1, List2):
    mapping[v2].add(v1)

現在,您有了一個字典,將列表2中的值映射到包含列表1中唯一值的集合。 您可以打印這些以使您的示例輸出與以下內容匹配:

for v2 in sorted(mapping):
    print '{} maps to {}'.format(v2, ', '.join(map(str, sorted(mapping[v2]))))

對於您的樣本輸入,將產生:

>>> mapping
defaultdict(<type 'set'>, {'A': set([1, 2, 3]), 'C': set([1]), 'B': set([1]), 'E': set([2]), 'D': set([2]), 'M': set([3]), 'L': set([3])})
>>> for v2 in sorted(mapping):
...     print '{} maps to {}'.format(v2, ', '.join(map(str, sorted(mapping[v2]))))
... 
A maps to 1, 2, 3
B maps to 1
C maps to 1
D maps to 2
E maps to 2
L maps to 3
M maps to 3

defaultdictzip一起使用並設置

>>> l1 = [1,1,1,2,2,2,2,2,3,3,3]
>>> l2 = ['a','b','c','d','d','d','e','a','a','l','m']
>>> result = defaultdict(set)
>>> for v,k in zip(l1,l2):
...     result[k].add(v)
... 
>>> result
defaultdict(<type 'set'>, {'a': set([1, 2, 3]), 'c': set([1]), 'b': set([1]),
                  'e': set([2]), 'd': set([2]), 'm': set([3]), 'l': set([3])})
>>> list(result['a'])
[1, 2, 3]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM