Hướng dẫn python merge lists by key - danh sách hợp nhất python bằng khóa

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

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ả.1 gold badge20 silver badges23 bronze badges

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?

Làm thế nào để bạn hợp nhất các giá trị chính trong Python?

Dưới đây là tám phương pháp tiêu chuẩn mà bạn có thể hợp nhất hai từ điển trong Python ...
1] Sử dụng phương thức Update [] ..
2] Sử dụng toán tử hợp nhất [|] ..
3] Sử dụng toán tử ** ..
4] Giải nén từ điển thứ hai ..
5] Sử dụng Phương thức Collection.ChainMap [] ..
6] Sử dụng itertools.....
7] Sử dụng khả năng hiểu từ điển ..
8] Thêm giá trị của các khóa chung ..

Làm cách nào để kết hợp nhiều danh sách thành một python?

Trong Python, chúng ta có thể sử dụng toán tử + để hợp nhất nội dung của hai danh sách thành một danh sách mới.Ví dụ: chúng ta có thể sử dụng toán tử + để hợp nhất hai danh sách, tức là nó đã trả về một danh sách được nối mới, chứa nội dung của cả List_1 và List_2.use the + operator to merge the contents of two lists into a new list. For example, We can use + operator to merge two lists i.e. It returned a new concatenated lists, which contains the contents of both list_1 and list_2.

Bài Viết Liên Quan

Chủ Đề