Tôi có một số dữ liệu JSON từ API dưới dạng danh sách từ điển, ví dụ:
thực thể = [
{'name': 'McDonalds', 'thành phố': 'New York', 'tổng': 250000000, 'id': '000001'},
{'name': 'McDonalds', 'thành phố': 'Philadelphia', 'tổng': 190000000, 'id': '000002'},
{'name': 'Shake Shack', 'city': 'Los Angeles', 'gross': 17000000, 'id': '000003'},
{'name': 'In-N-Out Burger', 'city': 'Houston', 'gross': 23000000, 'id': '000004'},
{'name': 'In-N-Out Burger', 'city': 'Atlanta', 'gross': 12000000, 'id': '000005'},
{'name': 'In-N-Out Burger', 'city': 'Dallas', 'gross': 950000, 'id': '000006'},
]
Tôi đang cố gắng nhóm tất cả các mục có cùng tên vào một danh sách từ điển khác được đặt tên theo doanh nghiệp của chúng.
def nhóm_entities(thực thể):
thực thể_groups = []
# Thiết lập danh sách trống cho mỗi tên duy nhất
cho thực thể trong thực thể:
thực thể['name'] = []
thực thể_groups.append(thực thể ['tên'])
# Trong danh sách của mỗi doanh nghiệp, thêm các từ điển riêng có thông tin chi tiết
cho thực thể trong thực thể:
thực thể['name'].append({
'tên':thực thể['tên'],
'thành phố':thực thể['thành phố'],
'tổng':thực thể['tổng'],
'id':thực thể['id']
})
thực thể_groups.extend(thực thể['name'])
trả về nhóm_thực thể
我不能使用 thực thể['name']
làm tên biến, vì nó sẽ chỉ thay đổi giá trị ban đầu và tôi cũng không thể sử dụng phiên bản chuỗi của tên. Tôi muốn kết thúc với dữ liệu mà tôi có thể lặp lại và hiển thị như sau:
Việc kinh doanh
• Tất cả các giá trị từ điển Thành phố 1
• Tất cả các giá trị từ điển Thành phố 2, v.v.
Việc kinh doanh
• Tất cả các giá trị từ điển Thành phố 1
• Tất cả các giá trị từ điển Thành phố 2, v.v.
Tôi thậm chí không biết cách nghiên cứu sâu hơn về vấn đề này vì tôi không biết thuật ngữ "có thể tìm trên Google" thích hợp để mô tả những gì tôi đang cố gắng làm.
Nếu dữ liệu của bạn được sắp xếp theo tên:
từ itertools nhập nhóm theo
từ toán tử nhập itemgetter
thực thể = [
{'name': 'McDonalds', 'thành phố': 'New York', 'tổng': 250000000, 'id': '000001'},
{'name': 'McDonalds', 'thành phố': 'Philadelphia', 'tổng': 190000000, 'id': '000002'},
{'name': 'Shake Shack', 'city': 'Los Angeles', 'gross': 17000000, 'id': '000003'},
{'name': 'In-N-Out Burger', 'city': 'Houston', 'gross': 23000000, 'id': '000004'},
{'name': 'In-N-Out Burger', 'city': 'Atlanta', 'gross': 12000000, 'id': '000005'},
{'name': 'In-N-Out Burger', 'city': 'Dallas', 'gross': 950000, 'id': '000006'},
]
data = [{k: list(v)} for k, v in groupby(entities, itemgetter("name"))]
Điều này sẽ cung cấp cho bạn:
[{'McDonalds': [{'id': '000001', 'city': 'New York', 'name': 'McDonalds', 'tổng': 250000000}, {'id': '000002', ' thành phố': 'Philadelphia', 'tên': 'McDonalds', 'tổng': 190000000}]}, {'Shake Shack': [{'id': '000003', 'city': 'Los Angeles', 'name': 'Shake Shack', 'gross': 17000000}]}, {'In-N-Out Burger': [{'id': '000004', 'city': 'Houston', 'name': 'In-N-Out Burger', 'tổng': 23000000}, {'id': '000005', 'city': 'Atlanta', 'name': 'In-N-Out Burger', 'tổng': 12000000}, {'id': '000006', ' city': 'Dallas', 'name': 'In-N-Out Burger', 'thô': 950000}]}]
Hoặc nếu bạn không muốn tên:
phím = ("id","tổng", "thành phố")
data = [{k: [dict(zip(keys, itemgetter(*keys)(dct))) for dct in v]} for k, v in groupby(entities, itemgetter("name"))]
Nếu dữ liệu không được sắp xếp, bạn có thể sử dụngdefaultdict:
từ bộ sưu tập nhập defaultdict
d = defaultdict(list)
cho thực thể trong thực thể:
d[entity["name"]].append(dict(entity))
print([{k: v} for k,v in d.items()])
再次删除名称,或者您可能想使用原始字典并且不介意改变它们:
từ bộ sưu tập nhập defaultdict
d = defaultdict(list)
cho thực thể trong thực thể:
d[entity.pop("name")].append(entity)
print([{k: v} for k,v in d.items()])
Điều này sẽ cung cấp cho bạn:
[{'Shake Shack': [{'id': '000003', 'city': 'Los Angeles', 'gross': 17000000}]}, {'McDonalds': [{'id': '000001', 'city': 'New York', 'gross': 250000000}, {'id': '000002', 'city': 'Philadelphia', 'gross': 190000000}]}, {'In-N-Out Burger': [{'id': '000004', 'city': 'Houston', 'gross': 23000000}, {'id': '000005', 'city': 'Atlanta', 'gross': 12000000}, {'id': '000006', 'city': 'Dallas', 'gross': 950000}]}]
这完全取决于您是否要再次使用原始字典和/或是否要将名称保留在字典中。您可以组合部分逻辑以获得您喜欢的任何格式。
Tôi là một lập trình viên xuất sắc, rất giỏi!