映射字典和列表

2021-12-08 05:59:00 发布

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

如果你有三张单子,最简单的方法是什么

list [1,2,3] [a,b,c] [5,6,7]

用字典把它画出来

{1:{'a':5}, 2:{'b':6}, 3:{'c':7}} 

我觉得你得用拉链。。你知道吗

在python中,字典理解是不可能的,如何做到这一点呢

3条回答
网友
1楼 ·

第一个和第二个列表中的值是否可以重复,例如:

a, b, c = [3,1,2,3,1], ['a','a','b','c','d'], [1,5,6,7,8]

如果您需要订单:

from collections import OrderedDict
od = OrderedDict()
for x, y, z in zip(a, b, c):
    if x not in od:
        od[x] = OrderedDict()
    od[x][y] = z
print od

输出:

OrderedDict([(3, OrderedDict([('a', 1), ('c', 7)])), (1, OrderedDict([('a', 5), ('d', 8)])), (2, OrderedDict([('b', 6)]))])

如果您不需要订购:

from collections import defaultdict
dd = defaultdict(dict)
for x, y, z in zip(a,b,c):
    dd[x][y] = z
print dd

输出:

defaultdict(<type 'dict'>, {1: {'a': 5, 'd': 8}, 2: {'b': 6}, 3: {'a': 1, 'c': 7}})
网友
2楼 ·

字典没有顺序,所以我假设您希望根据排序键的顺序来映射它们。您可以通过以下方法来实现这一点:

>>> lst = [1, 2, 3]
>>> dct = {'a': 5, 'b': 6, 'c': 7}
>>> {i: {k: dct[k]} for i, k in zip(lst, sorted(dct))}
{1: {'a': 5}, 2: {'b': 6}, 3: {'c': 7}}

如果决定使用元组列表而不是字典来维持顺序,可以执行以下操作:

>>> lst = [1, 2, 3]
>>> tups = [('a', 5), ('b', 6), ('c', 7)]
>>> {i: {k: v} for i, (k, v) in zip(lst, tups)}
{1: {'a': 5}, 2: {'b': 6}, 3: {'c': 7}}
网友
3楼 ·

更新中的3-list案例很简单,有zip

d = {k:{k1:v1} for k,k1,v1 in zip(list1,list2,list3)}

相关问题