Tôi có hai danh sách hai phần tử. Yếu tố đầu tiên của tuple là ID và thứ hai là một số loại giá trị. Loại giá trị phụ thuộc vào danh sách.
lst1 = [ ['a', 1], ['b', 2], ['c', 3] ]
lst2 = [ ['b', 5], ['a', 4], ['c', 6] ]
Cách dễ nhất để kết hợp chúng thành:
lst3 = [ ['a', 1, 4], ['b', 2, 5], ['c', 3, 6]]
Đã hỏi ngày 20 tháng 5 năm 2015 lúc 9:00May 20, 2015 at 9:00
user31027user31027user31027
3451 Huy hiệu vàng3 Huy hiệu bạc15 Huy hiệu đồng1 gold badge3 silver badges15 bronze badges
5
Tôi khuyên bạn nên biến những danh sách các bộ dữ liệu thành từ điển trước. Sau đó, giả sử rằng cả hai danh sách đều chứa cùng một "khóa", bạn có thể sử dụng một danh sách hiểu đơn giản để có được các giá trị tương ứng từ hai từ điển.
lst1 = [ ['a', 1], ['b', 2], ['c', 3] ]
lst2 = [ ['b', 5], ['a', 4], ['c', 6] ]
dict1 = dict[lst1]
dict2 = dict[lst2]
lst3 = [[k, dict1[k], dict2[k]] for k in sorted[dict1]]
Lưu ý rằng từ điển không có thứ tự cố định. Nếu bạn muốn bảo tồn đơn hàng mà các khóa có trong ____10, bạn cũng có thể sử dụng điều này, như đã đề xuất trong nhận xét:
lst3 = [[k, v, dict2[k]] for k, v in lst1]
Đã trả lời ngày 20 tháng 5 năm 2015 lúc 9:06May 20, 2015 at 9:06
tobias_ktobias_ktobias_k
79.6K11 Huy hiệu vàng115 Huy hiệu bạc172 Huy hiệu đồng11 gold badges115 silver badges172 bronze badges
lst1 = [ ['a', 1], ['b', 2], ['c', 3] ]
lst2 = [ ['b', 5], ['a', 4], ['c', 6] ]
dst1 = dict[lst1]
dst2 = dict[lst2]
for i in dst1:
if i in dst2:
dst1[i] = [dst1[i],dst2[i]]
print dst1
{'a': [1, 4], 'c': [3, 6], 'b': [2, 5]}
Sau đó, bạn có thể định dạng này
lst3 = [ ['a', 1, 4], ['b', 2, 5], ['c', 3, 6]]
1 theo bất kỳ định dạng nào bạn muốn kết quả.Đã trả lời ngày 20 tháng 5 năm 2015 lúc 9:06May 20, 2015 at 9:06
79.6K11 Huy hiệu vàng115 Huy hiệu bạc172 Huy hiệu đồngSuku
Sau đó, bạn có thể định dạng này
1 theo bất kỳ định dạng nào bạn muốn kết quả.1 gold badge20 silver badges23 bronze badgeslst3 = [ ['a', 1, 4], ['b', 2, 5], ['c', 3, 6]]
Sukusuku
lst1 = [['a', 1], ['b', 2], ['c', 3]]
lst2 = [['b', 5], ['a', 4], ['c', 6]]
from collections import OrderedDict
d = OrderedDict[zip[[tup[0] for tup in lst1], lst1]]
for k,v in lst2:
d[k] = d[k] + [v,]
print[d.values[]]
[['a', 1, 4], ['b', 2, 5], ['c', 3, 6]]
3.7701 Huy hiệu vàng20 Huy hiệu bạc23 Huy hiệu đồngMay 20, 2015 at 9:10
Tôi đang kết hợp hai danh sách các dicts, dựa trên giá trị của khóa 'thời gian'.
Nếu có hai danh sách, ví dụ:
a=[{'time': '25 APR', 'total': 10, 'high': 10},
{'time': '26 APR', 'total': 5, 'high': 5}]
b=[{'time': '24 APR', 'total': 10, 'high': 10},
{'time': '26 APR', 'total': 15, 'high': 5}]
Các danh sách này chứa các giá trị mỗi ngày, cho một nguồn cụ thể, nói a và b.
Tôi muốn thêm các dicts trong danh sách, dựa trên giá trị của khóa 'thời gian'. Vì vậy, kết quả cuối cùng sẽ là:
c=[{'time': '24 APR', 'total': 10, 'high': 10},
{'time': '25 APR', 'total': 10, 'high': 10},
{'time': '26 APR', 'total': 20, 'high': 10}]
Lưu ý rằng kết quả cho 26 APR được thêm vào.
Cách tôi làm điều này bây giờ, như sau:
from collections import Counter
import itertools
lst = sorted[itertools.chain[totals_30_days, past_30_days], key=lambda x: x['time']]
f = []
for k,v in itertools.groupby[lst, key=lambda x:x['time']]:
v = list[v]
# Check if there are more than one item, because adding an empty Counter[]
# will delete any keys with zero or negative values.
if len[v] > 1:
e = Counter[]
for i in v:
c = Counter[i]
time = c.pop['time', None]
e = e + c
e['time'] = time
f.append[dict[e]]
else:
f.append[v[0]]
print[f]
Kết quả là chính xác:
[{'high': 10, 'total': 10, 'time': '24 APR'}, {'high': 10, 'total': 10, 'time': '25 APR'}, {'high': 10, 'total': 20, 'time': '26 APR26 APR'}]
Nhưng tôi tự hỏi nếu nó có thể hiệu quả hơn. Bất kỳ ý tưởng?