Python 按值对字典进行分组
我有两本字典:Python 按值对字典进行分组,python,dictionary,grouping,Python,Dictionary,Grouping,我有两本字典: data1 = [ {key1: 1, key2: 1, count: 3}, {key1: 2, key2: 1, count: 15}, {key1: 3, key2: 1, count: 12}, {key1: 1, key2: 2, count: 13}, {key1: 2, key2: 2, count: 8}, ] data2 = [ key1:{1: 'value1_1', 2: 'value1_2', 3: 'value1_3'}, key2:{1: 'va
data1 = [
{key1: 1, key2: 1, count: 3},
{key1: 2, key2: 1, count: 15},
{key1: 3, key2: 1, count: 12},
{key1: 1, key2: 2, count: 13},
{key1: 2, key2: 2, count: 8},
]
data2 = [
key1:{1: 'value1_1', 2: 'value1_2', 3: 'value1_3'},
key2:{1: 'value2_1', 2: 'value2_2'},
]
我想将这两个词典合并成一个大词典,如下所示:
new_data = [
{key1: 1, key1_name: 'value1_1', key2: 1, key2_name: 'value2_1', count: 3},
{key1: 2, key1_name: 'value1_2', key2: 1, key2_name: 'value2_1', count: 15},
{key1: 3, key1_name: 'value1_3', key2: 1, key2_name: 'value2_1', count: 12},
{key1: 1, key1_name: 'value1_1', key2: 2, key2_name: 'value2_2', count: 13},
{key1: 2, key1_name: 'value1_2', key2: 2, key2_name: 'value2_2', count: 8},
{key1: 3, key1_name: 'value1_3', key2: 2, key2_name: 'value2_2', count: 0},
]
new_data2 = [
{key1: {
value: 1, name: 'value1_1',
data: [
{value: 1, name: 'value2_1', count: 3},
{value: 2, name: 'value2_2', count: 13},
]},
{key1: {
value: 2, name: 'value1_2',
data: [
{value: 1, name: 'value2_1', count: 15},
{value: 2, name: 'value2_2', count: 8},
]},
{key3: {
value: 2, name: 'value1_3',
data: [
{value: 1, name: 'value2_1', count: 12},
{value: 2, name: 'value2_2', count: 0},
]}]
或者像这样:
new_data = [
{key1: 1, key1_name: 'value1_1', key2: 1, key2_name: 'value2_1', count: 3},
{key1: 2, key1_name: 'value1_2', key2: 1, key2_name: 'value2_1', count: 15},
{key1: 3, key1_name: 'value1_3', key2: 1, key2_name: 'value2_1', count: 12},
{key1: 1, key1_name: 'value1_1', key2: 2, key2_name: 'value2_2', count: 13},
{key1: 2, key1_name: 'value1_2', key2: 2, key2_name: 'value2_2', count: 8},
{key1: 3, key1_name: 'value1_3', key2: 2, key2_name: 'value2_2', count: 0},
]
new_data2 = [
{key1: {
value: 1, name: 'value1_1',
data: [
{value: 1, name: 'value2_1', count: 3},
{value: 2, name: 'value2_2', count: 13},
]},
{key1: {
value: 2, name: 'value1_2',
data: [
{value: 1, name: 'value2_1', count: 15},
{value: 2, name: 'value2_2', count: 8},
]},
{key3: {
value: 2, name: 'value1_3',
data: [
{value: 1, name: 'value2_1', count: 12},
{value: 2, name: 'value2_2', count: 0},
]}]
注1:请注意,每个组合的dict都有一个额外的行,其中键1=3,键2=2,该组合在“data2”dict中没有值,因此分配给此行的计数值为0
注2:我不确定用什么“更好”的方式来表示我的数据,比如新的数据1或新的数据2
注3:我希望尽可能使其通用,我不能假设级别数(在本例中为2级,键1和键2)是固定的,因此我需要考虑更多级别,这意味着能够处理3级甚至4级。
例如(具有3个级别):
任何帮助都将不胜感激。
谢谢你可以试试这个:
key2_name = "key2_name"
key1_name = "key1_name"
key3_name = "key3_name"
data1 = [
{key1: 1, key2: 1, count: 3},
{key1: 2, key2: 1, count: 15},
{key1: 3, key2: 1, count: 12},
{key1: 1, key2: 2, count: 13},
{key1: 2, key2: 2, count: 8}
]
data2 = { key1:{1: 'value1_1', 2: 'value1_2', 3: 'value1_3'}, key2:{1: 'value2_1', 2: 'value2_2'}
}
for dict_ in data1:
dict_["key1_name"] = data2[key1][dict_[key1]]
dict_["key2_name"] = data2[key2][dict_[key2]]
# equivalent to:
for dict_ in data1:
for k, v in (key1_name, key1), (key2_name, key2):
dict_[k] = data2[v][dict_[v]]
打印(数据1)
[编辑3个键示例]
data1 = [
{key1: 1, key2: 1, key3: 1, count: 3},
{key1: 2, key2: 1, key3: 1, count: 15},
{key1: 3, key2: 1, key3: 1, count: 12},
{key1: 1, key2: 2, key3: 1, count: 13},
{key1: 2, key2: 2, key3: 2, count: 8}
]
data2 = { key1:{1: 'value1_1', 2: 'value1_2', 3: 'value1_3'},
key2:{1: 'value2_1', 2: 'value2_2'},
key3:{1: 'value3_1', 2: 'value3_2'}
}
keys_name = [("%s_name"%v, v) for v in data2.keys()]
for dict_ in data1:
for k, v in keys_name:
dict_[k] = data2[v][dict_[v]]
但是我如何添加“缺少”行({key1:3,key1_name:'value1_3',key2:2,key2_name:'value2_2',count:0}),以及您是否看到了我的Note3?因为如果data1和data有3个键用于缺少的行,则此代码将不起作用,您希望count=0,仅此而已?不确定您的意思是什么,“混乱”行应该是:({key1:3,key1_name:'value1_3',key2:2,key2_name:'value2_2',count 0})正如我在前面的评论中所写的,我认为添加与data1不匹配的行不是一个好主意,因为这意味着要列出键之间的所有组合。还有,你将如何使用结果?但这正是我需要的,拥有所有可能的组合,以便稍后我可以在图表上显示它,对于所有未选择的组合,带0的条形图