Hướng dẫn python dictionary sum values with same key - giá trị tổng từ điển python với cùng một khóa

Danh sách các từ điển có thể có cùng một khóa với các giá trị khác nhau hoặc cùng nhau. Sử dụng hàm giảm () và toán tử + có thể tổng hợp các giá trị có cùng một khóa trong từ điển Python.reduce() function and + operator can sum values with the same key in Python dictionary.

Bạn có thể có cùng một khóa hai lần trong từ điển Python. Mỗi chìa khóa trong từ điển phải là duy nhất. Đọc tài liệu. (Nếu một khóa xảy ra nhiều lần, giá trị cuối cùng cho khóa đó trở thành giá trị tương ứng trong từ điển mới.)

Mã ví dụ đơn giản.

Đối với ví dụ này, bạn phải nhập mô -đun functools.functools module.

import collections
import functools
import operator

my_dict = [{'a': 5, 'b': 1, 'c': 2},
           {'a': 2, 'b': 5},
           {'a': 10, 'c': 10}]

# sum the values with same keys
res = dict(functools.reduce(operator.add,
                            map(collections.Counter, my_dict)))

print("New dict : ", res)

Output::

Hướng dẫn python dictionary sum values with same key - giá trị tổng từ điển python với cùng một khóa

Hoặc sử dụng phương pháp truy cập

import collections

my_dict = [{'a': 5, 'b': 1, 'c': 2},
           {'a': 2, 'b': 5},
           {'a': 10, 'c': 10}]

counter = collections.Counter()
for d in my_dict:
    counter.update(d)

res = dict(counter)

print("New dict : ", res)

Đầu ra: Diễn ngôn mới: {‘A,: 17,‘ B, 6, ‘C, 12}: New dict : {‘a’: 17, ‘b’: 6, ‘c’: 12}

Hãy bình luận nếu bạn có bất kỳ nghi ngờ hoặc đề xuất nào về mã từ điển tổng python này.

Lưu ý: IDE: & NBSP; Pycharm & NBSP; 2021.3.3 (Phiên bản cộng đồng) IDE: PyCharm 2021.3.3 (Community Edition)

Windows 10

Python 3.10.1

Tất cả & nbsp; ví dụ python & nbsp; là trong & nbsp; Python & nbsp; 3, vì vậy có thể khác với các phiên bản Python 2 hoặc nâng cấp. Python Examples are in Python 3, so Maybe its different from python 2 or upgraded versions.

Hướng dẫn python dictionary sum values with same key - giá trị tổng từ điển python với cùng một khóa

Bằng cấp về Khoa học máy tính và Kỹ sư: Nhà phát triển ứng dụng và có nhiều ngôn ngữ lập trình kinh nghiệm. Sự nhiệt tình cho công nghệ và thích học kỹ thuật.

Trong Python, tôi có danh sách các dicts:

dict1 = [{'a':2, 'b':3},{'a':3, 'b':4}]

Tôi muốn một dict cuối cùng sẽ chứa tổng của tất cả các dicts. Tức là kết quả sẽ là:

dict1 = [{'a':2, 'b':3},{'a':3, 'b':4}]
2

N.B: Mỗi dict trong danh sách sẽ chứa cùng số lượng khóa, các cặp giá trị.

STH

Phim thương hiệu vàng 216K5252 gold badges274 silver badges364 bronze badges

Hỏi ngày 16 tháng 8 năm 2010 lúc 5:12Aug 16, 2010 at 5:12

Hướng dẫn python dictionary sum values with same key - giá trị tổng từ điển python với cùng một khóa

Nazmul Hasannazmul HasanNazmul Hasan

6.70013 Huy hiệu vàng35 Huy hiệu bạc37 Huy hiệu đồng13 gold badges35 silver badges37 bronze badges

0

Bạn có thể sử dụng bộ sưu tập.

counter = collections.Counter()
for d in dict1: 
    counter.update(d)

Hoặc, nếu bạn thích Oneliners:

functools.reduce(operator.add, map(collections.Counter, dict1))

Đã trả lời ngày 16 tháng 8 năm 2010 lúc 6:38Aug 16, 2010 at 6:38

3

Một chút xấu xí, nhưng là một lớp lót:

dictf = reduce(lambda x, y: dict((k, v + y[k]) for k, v in x.iteritems()), dict1)

Đã trả lời ngày 16 tháng 8 năm 2010 lúc 5:23Aug 16, 2010 at 5:23

Carlcarlcarl

48.9K17 Huy hiệu vàng73 Huy hiệu bạc82 Huy hiệu Đồng17 gold badges73 silver badges82 bronze badges

7

Tận dụng

dict1 = [{'a':2, 'b':3},{'a':3, 'b':4}]
3 sẽ có được hiệu suất tốt hơn khi thêm nhiều hơn một vài dicts

>>> dict1 = [{'a':2, 'b':3},{'a':3, 'b':4}]
>>> from operator import itemgetter
>>> {k:sum(map(itemgetter(k), dict1)) for k in dict1[0]}        # Python2.7+
{'a': 5, 'b': 7}
>>> dict((k,sum(map(itemgetter(k), dict1))) for k in dict1[0])  # Python2.6
{'a': 5, 'b': 7}

Thêm đề xuất của Stephan

>>> {k: sum(d[k] for d in dict1) for k in dict1[0]}            # Python2.7+
{'a': 5, 'b': 7}
>>> dict((k, sum(d[k] for d in dict1)) for k in dict1[0])      # Python2.6
{'a': 5, 'b': 7}

Tôi nghĩ rằng phiên bản mã Python2.7 của Stephan đọc thực sự độc đáo

Đã trả lời ngày 16 tháng 8 năm 2010 lúc 6:19Aug 16, 2010 at 6:19

Hướng dẫn python dictionary sum values with same key - giá trị tổng từ điển python với cùng một khóa

John La Rooyjohn La RooyJohn La Rooy

Phù bằng vàng 287K5151 gold badges359 silver badges500 bronze badges

3

Điều này có thể giúp:

def sum_dict(d1, d2):
    for key, value in d1.items():
        d1[key] = value + d2.get(key, 0)
    return d1

>>> dict1 = [{'a':2, 'b':3},{'a':3, 'b':4}]
>>> reduce(sum_dict, dict1)
{'a': 5, 'b': 7}

Đã trả lời ngày 16 tháng 8 năm 2010 lúc 5:26Aug 16, 2010 at 5:26

Manoj Govindanmanoj GovindanManoj Govindan

70K21 Huy hiệu vàng131 Huy hiệu bạc138 Huy hiệu đồng21 gold badges131 silver badges138 bronze badges

Mã sau đây hiển thị một cách để làm điều đó:

dict1 = [{'a':2, 'b':3},{'a':3, 'b':4}]

final = {}
for k in dict1[0].keys():           # Init all elements to zero.
    final[k] = 0
for d in dict1:
    for k in d.keys():
        final[k] = final[k] + d[k]  # Update the element.

print final

Điều này ra:

import collections

my_dict = [{'a': 5, 'b': 1, 'c': 2},
           {'a': 2, 'b': 5},
           {'a': 10, 'c': 10}]

counter = collections.Counter()
for d in my_dict:
    counter.update(d)

res = dict(counter)

print("New dict : ", res)
0

như bạn muốn.

Hoặc, như được truyền cảm hứng bởi Kriss, tốt hơn nhưng vẫn có thể đọc được:

import collections

my_dict = [{'a': 5, 'b': 1, 'c': 2},
           {'a': 2, 'b': 5},
           {'a': 10, 'c': 10}]

counter = collections.Counter()
for d in my_dict:
    counter.update(d)

res = dict(counter)

print("New dict : ", res)
1

Tôi thông cho những ngày của Python gốc, có thể đọc được :-)

Đã trả lời ngày 16 tháng 8 năm 2010 lúc 5:26Aug 16, 2010 at 5:26

Hướng dẫn python dictionary sum values with same key - giá trị tổng từ điển python với cùng một khóa

Manoj Govindanmanoj Govindanpaxdiablo

70K21 Huy hiệu vàng131 Huy hiệu bạc138 Huy hiệu đồng229 gold badges1550 silver badges1921 bronze badges

7

Mã sau đây hiển thị một cách để làm điều đó:

Điều này ra:

import collections

my_dict = [{'a': 5, 'b': 1, 'c': 2},
           {'a': 2, 'b': 5},
           {'a': 10, 'c': 10}]

counter = collections.Counter()
for d in my_dict:
    counter.update(d)

res = dict(counter)

print("New dict : ", res)
2

như bạn muốn.

import collections

my_dict = [{'a': 5, 'b': 1, 'c': 2},
           {'a': 2, 'b': 5},
           {'a': 10, 'c': 10}]

counter = collections.Counter()
for d in my_dict:
    counter.update(d)

res = dict(counter)

print("New dict : ", res)
3

Hoặc, như được truyền cảm hứng bởi Kriss, tốt hơn nhưng vẫn có thể đọc được:

import collections

my_dict = [{'a': 5, 'b': 1, 'c': 2},
           {'a': 2, 'b': 5},
           {'a': 10, 'c': 10}]

counter = collections.Counter()
for d in my_dict:
    counter.update(d)

res = dict(counter)

print("New dict : ", res)
4

Tôi thông cho những ngày của Python gốc, có thể đọc được :-)May 27, 2014 at 0:42

Paxdiablopaxdiablotrudolf

830K229 Huy hiệu vàng1550 Huy hiệu bạc1921 Huy hiệu Đồng14 silver badges11 bronze badges

Tôi đã quan tâm đến hiệu suất của các phương thức được đề xuất, giảm và tổng hợp cho các danh sách lớn. Có lẽ ai đó cũng quan tâm đến điều này. Bạn có thể xem ở đây: https://gist.github.com/torstenrudolf/277e98df296f23ff921c

import collections

my_dict = [{'a': 5, 'b': 1, 'c': 2},
           {'a': 2, 'b': 5},
           {'a': 10, 'c': 10}]

counter = collections.Counter()
for d in my_dict:
    counter.update(d)

res = dict(counter)

print("New dict : ", res)
5

Tôi đã thử nghiệm ba phương pháp cho danh sách từ điển này:

import collections

my_dict = [{'a': 5, 'b': 1, 'c': 2},
           {'a': 2, 'b': 5},
           {'a': 10, 'c': 10}]

counter = collections.Counter()
for d in my_dict:
    counter.update(d)

res = dict(counter)

print("New dict : ", res)
0

Phương pháp tổng hợp cho thấy hiệu suất tốt nhất, theo sau là giảm và bộ đếm là chậm nhất. Thời gian hiển thị dưới đây là trong vài giây.

import collections

my_dict = [{'a': 5, 'b': 1, 'c': 2},
           {'a': 2, 'b': 5},
           {'a': 10, 'c': 10}]

counter = collections.Counter()
for d in my_dict:
    counter.update(d)

res = dict(counter)

print("New dict : ", res)
7

Nhưng điều này phụ thuộc vào số lượng các yếu tố trong từ điển. Phương pháp tổng sẽ chậm lại nhanh hơn giảm.

import collections

my_dict = [{'a': 5, 'b': 1, 'c': 2},
           {'a': 2, 'b': 5},
           {'a': 10, 'c': 10}]

counter = collections.Counter()
for d in my_dict:
    counter.update(d)

res = dict(counter)

print("New dict : ", res)
8

Đã trả lời ngày 27 tháng 5 năm 2014 lúc 0:42May 26, 2021 at 16:40

TrudolftrudolfSiggyF

1.56914 Huy hiệu bạc11 Huy hiệu đồng8 gold badges39 silver badges56 bronze badges

Bạn cũng có thể sử dụng chức năng tổng gấu trúc để tính tổng:

Kết quả này trong:Aug 16, 2010 at 6:41

Nó cũng hoạt động cho các điểm nổi:Dave Kirby

Đưa ra kết quả chính xác:5 gold badges65 silver badges82 bronze badges

0

Đã trả lời ngày 26 tháng 5 năm 2021 lúc 16:40

import collections

my_dict = [{'a': 5, 'b': 1, 'c': 2},
           {'a': 2, 'b': 5},
           {'a': 10, 'c': 10}]

counter = collections.Counter()
for d in my_dict:
    counter.update(d)

res = dict(counter)

print("New dict : ", res)
9

SiggyfsiggyfDec 30, 2015 at 11:05

Phù bằng vàng 21K839 Huy hiệu bạc56 Huy hiệu ĐồngKyan

Trong Python 2.7, bạn có thể thay thế dict bằng một đối tượng bộ sưu tập. Điều này hỗ trợ bổ sung và trừ các quầy.2 silver badges7 bronze badges

Đã trả lời ngày 16 tháng 8 năm 2010 lúc 6:41

dict1 = [{'a':2, 'b':3},{'a':3, 'b':4}]
0

Dave Kirbydave KirbyAug 13, 2019 at 0:03

Hướng dẫn python dictionary sum values with same key - giá trị tổng từ điển python với cùng một khóa

25.1k5 Huy hiệu vàng65 Huy hiệu bạc82 Huy hiệu Đồng

dict1 = [{'a':2, 'b':3},{'a':3, 'b':4}]
1

Đây là một cái đẹp hợp lý.

Đã trả lời ngày 30 tháng 12 năm 2015 lúc 11:05Jul 29, 2016 at 15:30

Hướng dẫn python dictionary sum values with same key - giá trị tổng từ điển python với cùng một khóa

Làm thế nào để bạn tổng hợp các giá trị của mỗi khóa trong từ điển Python?

Nó khá dễ dàng để có được tổng các giá trị của từ điển Python. Trước tiên, bạn có thể nhận các giá trị trong một danh sách bằng dict.values ​​(). Sau đó, bạn có thể gọi phương thức tổng để nhận tổng của các giá trị này.first get the values in a list using the dict. values(). Then you can call the sum method to get the sum of these values.

Chúng ta có thể có nhiều giá trị cho cùng một khóa trong python từ điển không?

Ý tưởng chung: Trong Python, nếu chúng ta muốn một từ điển có nhiều giá trị cho một khóa duy nhất, chúng ta cần lưu trữ các giá trị này trong thùng chứa của riêng chúng trong từ điển.Để làm như vậy, chúng ta cần sử dụng một thùng chứa làm giá trị và thêm nhiều giá trị của chúng ta vào container đó.we need to store these values in their own container within the dictionary. To do so, we need to use a container as a value and add our multiple values to that container.

Làm thế nào để bạn tổng hợp các phần tử trong danh sách từ điển nếu hai giá trị chính là giống nhau?

Để tổng hợp các giá trị trong danh sách các từ điển: sử dụng biểu thức trình tạo để lặp qua danh sách. Mỗi lần lặp, hãy truy cập từ điển hiện tại tại khóa cụ thể. Thông báo biểu thức trình tạo vào hàm sum ().Use a generator expression to iterate over the list. On each iteration, access the current dictionary at the specific key. Pass the generator expression to the sum() function.

Làm thế nào để bạn tổng hợp hai giá trị trong một từ điển trong Python?

5 Cách tốt nhất để tổng hợp các giá trị từ điển trong Python..
Phương pháp 1: Sử dụng tổng () và dict.giá trị ().
Phương pháp 2: Sử dụng sum () và biểu thức máy phát ..
Phương pháp 3: Sử dụng functools.Giảm () và Lambda ..
Phương pháp 4: Sử dụng sum () và list ().
Phương pháp 5: Sử dụng đơn giản cho vòng lặp và tổng hợp ..