如何在字典中添加二元组?

2024-09-21 02:55:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个清单:

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

我该如何制作一个字典,其中两个item元组将是这些元组的值和list1中的项的键。在

像这样:{'USD': (1.0748, 1.0508), 'GBP': (0.8639, 0.8399), etc.}.

列表1中的第一项与列表2中的第一个元组一起,第二个与第二个元组一起,依此类推

另外,正如您所见,“数字”在list2中是字符串,但在字典中变成了浮点。如何以最简单的方式实现这一点?在

谢谢你的帮助。在


Tags: 列表字典元组usdbamgbprsdlist2
2条回答

regex的做法

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

首先应理解将值从字符串转换为浮点值:

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

这只需遍历每个元组中的每个子元素,将','替换为'.',并通过使用map使它们成为{};将{}结果包装成tuple将其展开,并保留元组中的元素原样。在

然后使用zip将这些对传递给dictdict还接受元组对{},并据此初始化{}和{}。所以:

^{pr2}$

由于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)}

相关问题 更多 >

    热门问题