2013-10-17 196 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)))