我有以下两个列表:
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)]
答案 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)
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个元素。
请注意,这只会返回将最短列表(keys
或value
)与相应元素配对的字典。
如果您希望为未配对元素设置默认值,则可以始终使用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
)。