我创建了两个列表。
list1= [a,b,c,a,d]
list2=[1,2,3,4,5]
我想根据索引位置找到这两个列表之间的关系,即
在list1 a
中将索引0,3
重复2次。在list2索引0,3
中的值是1 ,4
,关系是一对多的是:{{1} }
下一个{1,4}
在列表b
中不重复,其索引为1
,列表2索引1
的值为1
,关系是一对一的{ {1}}
我的预期输出将是2
答案 0 :(得分:2)
我会使用defaultdict:
from collections import defaultdict
list1 = ['a', 'b', 'c', 'a', 'd']
list2 = [1, 2, 3, 4, 5]
result = defaultdict(set)
for value1, value2, in zip(list1, list2):
result[value1].add(value2)
print(dict(result))
输出
{'a': {1, 4}, 'b': {2}, 'c': {3}, 'd': {5}}
答案 1 :(得分:2)
您可以结合使用字典和列表理解来做到这一点:
{x: [list2[i] for i, j in enumerate(list1) if j == x] for x in list1}
输出:
{'a': [1, 4], 'b': [2], 'c': [3], 'd': [5]}
答案 2 :(得分:0)
a = ['a', 'b', 'c', 'a', 'd']
b = [1, 2, 3, 4, 5]
ret = {}
for idx, _a in enumerate(a):
value = ret.get(_a, ret.setdefault(_a, []))
value.append(b[idx])
然后ret将成为输出
答案 3 :(得分:0)
选项是压缩两个列表:
MAX(DECODE(SPØRGSMÅL_ID, 47, KARAKTER)) AS SP1,
to_number(concat(concat(MAX(DECODE(SPØRGSMÅL_ID, 141, KARAKTER)),
MAX(DECODE(SPØRGSMÅL_ID, 161, KARAKTER))),
MAX(DECODE(SPØRGSMÅL_ID, 121, KARAKTER))), MAX(DECODE(SPØRGSMÅL_ID, 101, KARAKTER)) AS SP2
结果:
L = list(zip(list1, list2))
使用它来创建一个以值作为集合的字典:
[('a', 1), ('b', 2), ('c', 3), ('a', 4), ('d', 5)]
答案 4 :(得分:0)
我不会在真实的代码中这样做,但是这种方法很有趣,甚至很有教育意义。
from collections import defaultdict
from itertools import groupby
from operator import itemgetter
xs = ['a', 'b', 'c', 'a', 'd']
ys = [1, 2, 3, 4, 5]
d = {
x : set(y for _, y in group)
for x, group in groupby(sorted(zip(xs, ys)), key = itemgetter(0))
}
print(d) # {'a': {1, 4}, 'b': {2}, 'c': {3}, 'd': {5}}
答案 5 :(得分:-1)
它不是来自纯python,因为这个问题是用pandas
标记的,我是这样尝试的。
选项1
df=pd.DataFrame({'l1':list1,'l2':list2})
res1=df.groupby('l1').apply(lambda x:x.l2.values.tolist()).to_dict()
选项2
print df.groupby('l1')['l2'].unique().to_dict()
输出:
{'a': [1, 4], 'c': [3], 'b': [2], 'd': [5]}