python列表中字典按指定相同的键值对合并到一个列表中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python列表中字典按指定相同的键值对合并到一个列表中相关的知识,希望对你有一定的参考价值。

类似数据,列表中每一个字典是一条数据,如何按天将数据分割,将每天的数据保存到一个列表中,每天的数据量不相同也就是每天数据的行数不同
[ 'date':2019-08-17, 'type':'旅游', 'over_im':'12365',
'date':2019-08-17, 'type':'娱乐', 'over_im':'11234',
'date':2019-08-17, 'type':'工作', 'over_im':'9754',
'date':2019-08-17, 'type':'休闲', 'over_im':'8634',
'date':2019-08-17, 'type':'生活', 'over_im':'3256',

'date':2019-08-18, 'type':'生活', 'over_im':'15342',
'date':2019-08-18, 'type':'旅游', 'over_im':'12332',
'date':2019-08-18, 'type':'玩乐', 'over_im':'11232',
'date':2019-08-18, 'type':'休闲', 'over_im':'10432',
'date':2019-08-18, 'type':'生活', 'over_im':'9532',
'date':2019-08-18, 'type':'工作', 'over_im':'7632',
'date':2019-08-18, 'type':'游戏', 'over_im':'5422',

'date':2019-08-19, 'type':'工作', 'over_im':'9942',
'date':2019-08-19, 'type':'游戏', 'over_im':'7842',
'date':2019-08-19, 'type':'休闲', 'over_im':'6213',
'date':2019-08-19, 'type':'生活', 'over_im':'5267',
'date':2019-08-19, 'type':'玩乐', 'over_im':'2445'
...]
]

使用集合去重 + local动态变量设置 + exec 字符串解析 可实现,话不多说,代码在下面,格式有问题调整下空格:
list_msg = ['date':'2019-08-17', 'type':'旅游', 'over_im':'12365',
'date':'2019-08-17', 'type':'haha', 'over_im':'12365',
'date':'2019-08-18', 'type':'娱乐', 'over_im':'11234','date':'2019-08-19', 'type':'生活', 'over_im':'9532',]

# 去除字典重复的data ,获取数据包含多少天内容
set_mark = i['date'] for i in list_msg
# 去除非法命名字符作为列表后缀:
ver_name = [i.replace('-','_') for i in set_mark]
# 给列表排序,确保按照顺序输出变量
ver_name.sort()
# 设置动态命名模板
list_name_template = 'list_data_'
# 创建local对象,准备创建动态变量
createver = locals()
# 循环遍历数据并创建动态列表变量接收
for mark in set_mark:
# 动态创建变量
createver[list_name_template + mark.replace('-','_')] \
= [dict_current for dict_current in list_msg if dict_current['date'] == mark]
for name in ver_name:
print(list_name_template + name + ':' ,end='\t') # 打印自动创建的变量名称,采用tab分隔
exec('print('+list_name_template + name +')') # 打印变量内容(列表)

'''
打印结果
list_data_2019_08_17: ['date': '2019-08-17', 'type': '旅游', 'over_im': '12365', 'date': '2019-08-17', 'type': 'haha', 'over_im': '12365']
list_data_2019_08_18: ['date': '2019-08-18', 'type': '娱乐', 'over_im': '11234']
list_data_2019_08_19: ['date': '2019-08-19', 'type': '生活', 'over_im': '9532']
'''
参考技术A

import pandas as pd

arr=['date':'2019-08-17', 'type':'旅游', 'over_im':'12365','date':'2019-08-17', 'type':'娱乐', 'over_im':'11234','date':'2019-08-17', 'type':'工作', 'over_im':'9754','date':'2019-08-17', 'type':'休闲', 'over_im':'8634','date':'2019-08-17', 'type':'生活', 'over_im':'3256','date':'2019-08-18', 'type':'生活', 'over_im':'15342','date':'2019-08-18', 'type':'旅游', 'over_im':'12332','date':'2019-08-18', 'type':'玩乐', 'over_im':'11232','date':'2019-08-18', 'type':'休闲', 'over_im':'10432','date':'2019-08-18', 'type':'生活', 'over_im':'9532','date':'2019-08-18', 'type':'工作', 'over_im':'7632','date':'2019-08-18', 'type':'游戏', 'over_im':'5422','date':'2019-08-19', 'type':'工作', 'over_im':'9942','date':'2019-08-19', 'type':'游戏', 'over_im':'7842','date':'2019-08-19', 'type':'休闲', 'over_im':'6213','date':'2019-08-19', 'type':'生活', 'over_im':'5267','date':'2019-08-19', 'type':'玩乐', 'over_im':'2445']

df=pd.DataFrame(arr)

print(df.set_index(['date','type']))

请点击输入图片描述

pandas能很方便的处理

追问

大神好:使用pandas处理后的数据该怎么取值呢?

追答

什么叫怎么取值?另存为Excel文件?

参考技术B 先说函数:dict(zip(列表1,列表2))

列表1作为key,列表2作为value

下面看一下代码:

#定义两个列表
list1 = range(0,10)
list2 = range(10,20)

#合并为字典,调用dict(zip())
dict_name = dict(zip(list1,list2))

print(dict_name)

运行结果:

0: 10, 1: 11, 2: 12, 3: 13, 4: 14, 5: 15, 6: 16, 7: 17, 8: 18, 9: 19追问

感觉不能满足需求,如何能按照date的value来进行分割,将date相同的字典添加到一个新列表中

参考技术C 如果对效率有要求,数据转成DataFrame来处理。对效率没有要求,直接循环也行 参考技术D for循环遍历一个一个取没什么好说的

python合并两个字典的内容,使用update方法

python合并两个字典的内容,使用update方法

 


update() 方法可使用一个字典所包含的键值对来更新己有的字典。

在执行 update() 方法时,如果被更新的字典中己包含对应的键值对,那么原 value 会被覆盖;如果被更新的字典中不包含对应的键值对,则该键值对被添加进去。

python的字典有一个update函数,该函数可以更新字典的内容

使用“字典名.update(键值对)”语句就可以把键值对添加进字典中了

#模型预测训练集的标签,会获取classification_report,我们这里设置output_dict = True把结果输出为字典的形式;

y_pred_train = pipeline_optimizer.predict(X_train)
print(classification_report(y_train, y_pred_train))
rep_train = classification_report(y_train, y_pred_train, output_dict=True)

             precision    recall  f1-score   support

           0       1.00      1.00    

以上是关于python列表中字典按指定相同的键值对合并到一个列表中的主要内容,如果未能解决你的问题,请参考以下文章

python合并两个字典的内容,使用update方法

python字典合并

如果它们共享任何键值对,如何合并来自不同列表的多个字典?

Python ❀ 字典

Python ❀ 字典

Python基础--dict字典操作