2016-12-02 70 views
0

我有兩個列表:如何將兩個元組添加到字典中?

list1 = ['USD', 'GBP', 'CHF', 'HRK', 'HUF', 'RSD', 'BAM', 'MKD', 'RUB', 'CZK', 'PLN', 'BGN', 'NOK', 'SEK', 'DKK', 'AUD', 'CAD', 'JPY'] 

list2 = [('1,0748', '1,0508'), ('0,8639', '0,8399'), ('1,0942', '1,0602'), ('7,6508', '7,4208'), ('5,8900', '7,0900'), ('4,9400', '1,1400'), ('1,9850', '1,9190'), ('2,1100', '0,2900'), ('1,9393', '6,5393'), ('7,5440', '6,5440'), ('4,5090', '4,3610'), ('1,9790', '1,9250'), ('9,2471', '8,9071'), ('9,9290', '9,6090'), ('7,5521', '7,3281'), ('1,4444', '1,4004'), ('1,4528', '1,4048'), ('1,8300', '8,0300')] 

我怎麼會讓一個字典,其中兩個項目的元組將在列表1鍵的元組值和物品。

事情是這樣的:{'USD': (1.0748, 1.0508), 'GBP': (0.8639, 0.8399), etc.}.

從列表中選擇一個的第一個項目開始從list2中第一個元組,第二與第二等

而且,正如你所看到的,「數字」是list2中的字符串,但在字典中變成浮動。這怎麼可能以最簡單的方式完成呢?

謝謝你的幫助。

+1

做它的粗方式的正則表達式的方法:'當d = {I:(浮動(j [0] .replace(',','。')),float(j [1] .replace(',','。')))for i,j in zip(list1,list2)}' –

+1

@ Farhan.K:如果這意味着解決OP的問題並且我們不會解決問題,那麼爲什麼它是一個評論而不是一個答案? – DSM

回答

3

你應該首先從字符串轉換值與理解,以浮動:

f_list2 = [tuple(map(float, [i.replace(',','.'), j.replace(',','.')])) for (i,j) in list2] 

這只是經過的每一個元組'.'更換的',' OCCURENCES每一個子元素,使它們float S按使用map;將map的結果打包成tuple將其展開並保留元組中原有的元素。

然後使用zip將對傳遞給dictdict也接受它用於相應地初始化keyvalue的元組對(key, val)。所以:

d = dict(zip(list1, f_list2)) 

隨着d現在具有的內容:

{'AUD': (1.4444, 1.4004), 
'BAM': (1.985, 1.919), 
'BGN': (1.979, 1.925), 
'CAD': (1.4528, 1.4048), 
'CHF': (1.0942, 1.0602), 
'CZK': (7.544, 6.544), 
'DKK': (7.5521, 7.3281), 
'GBP': (0.8639, 0.8399), 
'HRK': (7.6508, 7.4208), 
'HUF': (5.89, 7.09), 
'JPY': (1.83, 8.03), 
'MKD': (2.11, 0.29), 
'NOK': (9.2471, 8.9071), 
'PLN': (4.509, 4.361), 
'RSD': (4.94, 1.14), 
'RUB': (1.9393, 6.5393), 
'SEK': (9.929, 9.609), 
'USD': (1.0748, 1.0508)} 
+1

如果這是答案,我們應該把這個問題作爲一個dup來解決。但是,這個問題還有第二個組件,涉及從逗號作爲十進制標記字符串轉換爲浮點數。 – DSM

+0

呵呵,沒注意到那部分;我會更新它。 –

0

list1 = ['USD', 'GBP', 'CHF', 'HRK', 'HUF', 'RSD', 'BAM', 'MKD', 'RUB', 'CZK', 'PLN', 'BGN', 'NOK', 'SEK', 'DKK', 'AUD', 'CAD', 'JPY'] 
list2 = [('1,0748', '1,0508'), ('0,8639', '0,8399'), ('1,0942', '1,0602'), ('7,6508', '7,4208'), ('5,8900', '7,0900'), ('4,9400', '1,1400'), ('1,9850', '1,9190'), ('2,1100', '0,2900'), ('1,9393', '6,5393'), ('7,5440', '6,5440'), ('4,5090', '4,3610'), ('1,9790', '1,9250'), ('9,2471', '8,9071'), ('9,9290', '9,6090'), ('7,5521', '7,3281'), ('1,4444', '1,4004'), ('1,4528', '1,4048'), ('1,8300', '8,0300')] 
import re 
d = dict(zip(list1, eval(re.sub("'(\d+),(\d+)'", r'\1.\2', str(list2))))) 
# replace eval with ast.literal_eval if the source of list2 might be dangerous 
相關問題