2016-12-02 71 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 
相关问题