从2个列表制作字典

时间:2019-02-25 09:45:11

标签: python-3.x dictionary arraylist

我有以下两个列表:

list1 = ['17-Q2', '1.00', '17-Q3', '2.00', '17-Q4', '5.00', '18-Q1', '6.00']
list2 = ['17-Q2', '1', '17-Q3', '2', '17-Q4', '5', '18-Q1', '6']

我想用以下方式的字典。我可以在Python中做到吗?

result = [17-Q2: 1(1.00), 17-Q3: 2(2.00), 17-Q4: 5(5.00), 18-Q1: 6(6.00)]

4 个答案:

答案 0 :(得分:1)

这是一种解决方法:

result = {}
list1=['17-Q2', '1.00', '17-Q3', '2.00', '17-Q4', '5.00', '18-Q1', '6.00']
list2=['17-Q2', '1', '17-Q3', '2', '17-Q4', '5', '18-Q1', '6']

for i in range(0, len(list1)-1, 2):
    result[list1[i]] = list2[i + 1] + '(' + list1[i+1] + ')' ;

答案 1 :(得分:0)

假设您的输入如下:

list1 = ['17-Q2', '1.00', '17-Q3', '2.00', '17-Q4', '5.00', '18-Q1', '6.00']
list2 = ['17-Q2', '1', '17-Q3', '2', '17-Q4', '5', '18-Q1', '6']

所需的输出如下:

result = {17-Q2: 1(1.00), 17-Q3: 2(2.00), 17-Q4: 5(5.00), 18-Q1: 6(6.00)}

在单个while循环后面加上代码可能会有所帮助:

from collections import OrderedDict
final_dict = dict()
i = 0 # Initializing the counter

while (i<len(list1)):
      # Updating the final dict
      final_dict.update({list1[i]:str(list2[i+1]) + "(" + str(list1[i+1]) + ")"})
      i += 2 # Incrementing by two in order to land on the alternative index

# If u want sorted dictionary
sorted_dict = OrderedDict(sorted(final_dict.items()))
print (sorted_dict)

答案 2 :(得分:0)

您可以zip这两个列表,然后zip对其本身进行迭代,以便可以成对迭代以构建所需的字典:

i = zip(list1, list2)
result = {k: '%s(%s)' % (v2, v1) for (k, _), (v1, v2) in zip(i, i)}

result变为:

{'17-Q2': '1(1.00)', '17-Q3': '2(2.00)', '17-Q4': '5(5.00)', '18-Q1': '6(6.00)'}

答案 3 :(得分:0)

您可以使用zipdict

keys = ["a", "b", "c", "d"]
values = ["A", "B", "C"]

print(dict(zip(keys, values)))
# prints: {'a': 'A', 'b': 'B', 'c': 'C'}

之所以可行,是因为dict可以接受要创建的(key, value)元组的列表(或任何迭代器)。 zip函数允许从列表构建元组:

  

zip返回一个元组的迭代器,其中第i个元组包含每个自变量序列或可迭代对象中的第i个元素。

请注意,这只会返回将最短列表(keysvalue)与相应元素配对的字典。

如果您希望为未配对元素设置默认值,则可以始终使用itertools.zip_longest

from itertools import zip_longest

keys = ["a", "b", "c", "d"]
values = ["A", "B", "C"]

print(dict(zip_longest(keys, values)))
# prints: {'a': 'A', 'b': 'B', 'c': 'C', 'd': None}

当找不到相应的值时,还可以使用zip_longest关键字参数fillvalue来代替None

另一方面,如果您的值比键多,那么这将没有多大意义,因为您将为每个缺失的元素擦除默认键(即fillvalue)。

相关问题