我有两个清单:
a_list =
[['2017-06-03 23:01:49', 0], ['2017-06-03 23:02:49', 712.32], ['2017-06-03 23:03:49', 501.21].......]
b_list =
[['2017-06-03 23:01:49', 100.01], ['2017-06-03 23:02:49', 50.01], ['2017-06-03 23:03:49', 521.79].......]
我需要将a_list
与b_list
合并,以便它变为:
combined_list =
[['2017-06-03 23:01:49', 0, 100,01], ['2017-06-03 23:02:49', 712.32, 50.01], ['2017-06-03 23:03:49', 501.21, 521.79].......]
我将如何实现这一目标?
答案 0 :(得分:2)
a_list = [['2017-06-03 23:01:49', 0], ['2017-06-03 23:02:49', 712.32], ['2017-06-03 23:03:49', 501.21]]
b_list = [['2017-06-03 23:01:49', 100.01], ['2017-06-03 23:02:49', 50.01], ['2017-06-03 23:03:49', 521.79]]
假设a_list
和b_list
具有相同的长度,并假设两个列表中每个项目的第一个子项始终相同,那么根据您的示例,解决方案是一个-liner。
>>> [a + [b[1]] for (a, b) in zip(a_list, b_list)]
[[['2017-06-03 23:01:49', 0, 100.01]], [['2017-06-03 23:02:49', 712.32, 50.01]], [['2017-06-03 23:03:49', 501.21, 521.79]]]
答案 1 :(得分:2)
您可以使用zip()
并使用list comprehension
解压缩您的数据,例如:
a = [['2017-06-03 23:01:49', 0],
['2017-06-03 23:02:49', 712.32],
['2017-06-03 23:03:49', 501.21]]
b = [['2017-06-03 23:01:49', 100.01],
['2017-06-03 23:02:49', 50.01],
['2017-06-03 23:03:49', 521.79]]
final = [[k,v,j] for (k,v),(_,j) in zip(a, b)]
print(final)
输出:
[['2017-06-03 23:01:49', 0, 100.01],
['2017-06-03 23:02:49', 712.32, 50.01],
['2017-06-03 23:03:49', 501.21, 521.79]]
答案 2 :(得分:1)
试试这个,合并两个列表,然后使用defaultdict生成新的dictioanry,找到相同的键,将值附加到super_dict,然后将字典转换为列表格式:
$(".selectable").menu();
输出:
import collections
a_list = [['2017-06-03 23:01:49', 0], ['2017-06-03 23:02:49', 712.32], ['2017-06-03 23:03:49', 501.21]]
b_list = [['2017-06-03 23:01:49', 100.01], ['2017-06-03 23:02:49', 50.01], ['2017-06-03 23:03:49', 521.79]]
super_dict = collections.defaultdict(list)
for e in a_list+b_list:
super_dict[e[0]].append(e[1])
dictlist=list()
for key, value in super_dict.iteritems():
dictlist.append([key]+value)
dictlist
答案 3 :(得分:0)
以下代码应该有效。这个想法是你想要一个列表a
,并创建一个字典,其中键设置为a
的每个子列表中的第一个元素。与该列表关联的值是包含该a
子列表中的第二个元素的列表。然后我们遍历第二个列表b
并执行相同的操作。最后,我们遍历我们创建的字典D
,并将其转换为列表。
a = [[1,2], [3,4], [5,6]]
b = [[1,20],[3,40],[5, 50]]
D = {}
for i in a:
D[i[0]] = [i[1]]
for i in b:
D[i[0]].append(i[1])
finalList = []
for d in D:
finalList.append([d, D[d][0], D[d][1]])
print(finalList)
>>> [[1, 2, 10], [3, 4, 40], [5, 6, 50]]
注意,该程序假定两个相应的子列表保证具有相同的第一个元素。如果不是这种情况,或者两个列表a
和b
不相等,则您需要line 8
上的if语句来检查键值i[0]
是否为在列表中。
答案 4 :(得分:0)
把我的尝试放在混合中:
list1 = [["a","b"],["c","d"]]
list2 = [["a","1"],["c","2"]]
list3 = [(sub + [list2[i][-1]]) for i, sub in enumerate(list1)]
#[['a', 'b', '1'], ['c', 'd', '2']]
如果zip使用枚举,这非常接近@ A-B-B。
答案 5 :(得分:0)
a_list = [['2017-06-03 23:01:49', 0], ['2017-06-03 23:02:49', 712.32], ['2017-06-03 23:03:49', 501.21]]
b_list = [['2017-06-03 23:01:49', 100.01], ['2017-06-03 23:02:49', 50.01], ['2017-06-03 23:03:49', 521.79]]
combined_list = []
for index in range(3):
x = a_list[index] + b_list[index]
x.pop(2)
combined_list.append(x)
print(combined_list)
答案 6 :(得分:0)
如果你正在寻找一个班轮,那么我想我会试一试,
[set(item[0]).union(item[1]) for item in list(zip(a_list, b_list))]
>>>[{0, 100.01000000000001, '2017-06-03 23:01:49'}, {'2017-06-03 23:02:49', 50.009999999999998, 712.32000000000005}, {521.78999999999996, 501.20999999999998, '2017-06-03 23:03:49'}]
>>>
结果将是一组。不会有任何重复的元素。