2013-10-17 51 views
-6

编辑:Python从列表中创建字典

我想创建一个字典,其中第一个数字是关键字,其旁边的数字是该键的值的数量。所以第一行有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 
+2

[你尝试过什么(HTTP:/ /mattgemmell.com/2008/12/08/what-have-you-tried/)到目前为止? – zero323

+0

数字来自哪里? – Pines

+0

[从列表制作词典]可能的重复(http://stackoverflow.com/questions/19439472/make-dictionary-from-list) – SethMMorton

回答

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)))