Python从列表创建字典

时间:2013-10-17 21:21:37

标签: python dictionary

编辑:

我想创建一个字典,其中第一个数字是键,其旁边的数字是该键的值的数量。所以第一行有一个1和一个2,这意味着键1有2个值,这些值在下一行。第三行有一个2和3,这意味着键2有3个值,这些值是4,3,1。

第五行有一个3和一个4,这意味着键3有4个值,4个值是5,4,2,1。

我想知道如何创建一个可以创建这样字典的字典:

{1:[2,3],2:[4,3,1],3:[5,4,2,1] ...}

1 2
2 3
2 3
4 3 1
3 4
5 4 2 1
4 4
8 3 5 2
5 7
15 11 8 9 6 3 4
6 2
9 5
7 3
14 13 8
8 5
12 11 5 4 7
9 6
26 22 15 10 6 5
10 3
20 17 9
11 4
16 12 5 8
12 5
16 14 13 11 8

1 个答案:

答案 0 :(得分:1)

如果您能更好地描述问题,可以直接将其翻译成Python。

您想要成对线,将每一行拆分为单独的数字,并将第一行中的第一个数字映射到第二行中的数字列表。

所以,让我们从配对线开始吧。 (这是唯一棘手的问题 - 但是在SO上有大约3000个问题,向您展示了两种简单的方法。)

pairs = zip(*[iter(lines)]*2)

现在,对于每一对:

for first, second in pairs:

...将每一行分成不同的数字:

    first_numbers = map(int, first.split())
    second_numbers = map(int, second.split())

...并将第一行中的第一个数字映射到第二行中的数字列表:

    d[first_numbers[0]] = second_numbers

>>> lines = '''1 2
... 2 3
... 2 3
... 4 3 1'''.splitlines()
>>> d = {}
>>> pairs = zip(*[iter(lines)]*2)
>>> for first, second in pairs:
...     first_numbers = map(int, first.split())
...     second_numbers = map(int, second.split())
...     d[first_numbers[0]] = second_numbers
>>> d
{1: [2, 3], 2: [4, 3, 1]}

如果您想使用第一行中的第二个数字来验证长度,您可以添加:

...         if first_numbers[1] != len(second_numbers):
...             raise ValueError('Expected {}, got {}'.format(
...                 first_numbers[1], len(second_numbers)))