2016-10-05 52 views
0

我有一個for循環,其輸出15個的值的列表:如何在for循環中創建key:value對的列表?

for line in data: 
    line # type(line) is `<class 'list'>` 
     # do things with line 

line總是11個值的Python列表,即

['value1', 'value2', 'value3', 'value4', ... ] 

我有字典鍵的列表,其中我已手動創建:

['key1', 'key2', 'key3', ...] 

我想加入我的鑰匙給每個每條線的值在我的for循環。因此,我可以定義一個新的生產線,看起來像

['key1': 'value1', 'key2': 'value2', 'key3': 'value3', ... ] 

這將在for循環使用,即

for line in data: 
    line # values 
    # join key-value pairs 
    # new_line = ['key1': 'value1', 'key2': 'value2', 'key3': 'value3', ... ] 
     # do things with new_line 

編輯:我不相信這是一個重複的問題。 zip(keys, values)不會產生所需的結果。

編輯2:在列表中創建一個大字典會更容易嗎?

[{'key1': 'value1', 'key2': 'value2', 'key3': 'value3', ... }] 

或者可能是製表符分隔的測試文件?

KEY1:數值鍵2:值2 KEY3:值3 ....

回答

4

如果你只是想從兩個列表做一個字典,然後使用zip功能:

>>> keys, values = ['a', 'b'], [1, 2] 
>>> list(zip(keys, values)) 
[('a', 1), ('b', 2)] 

>>> dict(zip(keys, values)) 
{'a': 1, 'b': 2} 

>>> [{k: v} for k, v in zip(keys, values)] 
[{'a': 1}, {'b': 2}] 

>>> ' '.join('{}:{}'.format(k, v) for k, v in zip(keys, values)) 
'a:1 b:2' 

>>> '[{}]'.format(', '.join("'{}': '{}'".format(k, v) for k, v in zip(keys, values))) 
"['a': '1', 'b': '2']" 
+0

所以,它既不出現的以上選項解決了我的問題。我的輸出看起來像 '['key1':'value1','key2':'value2','key3':'value3',...]'。不是'[('a',1),('b',2)]'也不是'{'a':1,'b':2}'。這是一個鍵值對列表 – ShanZhengYang

+0

@ShanZhengYang你想得到一個列表的字典? '['key1':'value1']'不是合法的Python語法。 – skovorodkin

+0

我有很多格式['key1:value1','key2:value2',...]的數據,我將使用分區(:)等。我希望上述向量處於相同的格式。可以在列表中創建一個大的字典,即'[{'key1:value1','key2:value2',...}]',或者甚至可以用鍵值對進行製表符分隔文字 'key1:value1 key2:value2 key3:value3'... – ShanZhengYang