从dict列表中提取键和多个值的Pythonic方法
我有一些代码可以工作,数据从一个文本文件中读取,作为一个dict列表,代码从每个dict中获取键和值作为循环。虽然有效,但我相信有一种比我的更好的方法: 代码从dict列表中提取键和多个值的Pythonic方法,python,list,dictionary,Python,List,Dictionary,我有一些代码可以工作,数据从一个文本文件中读取,作为一个dict列表,代码从每个dict中获取键和值作为循环。虽然有效,但我相信有一种比我的更好的方法: 代码 data_list = [{'Clk': '190', '50%': '5.3149999999999995', '100%': '4.715'}, {'Clk': '195', '50%': '5.295', '100%': '4.765'}, {'Clk': '200', '50%': '5.395', '100%': '4.9'
data_list = [{'Clk': '190', '50%': '5.3149999999999995', '100%': '4.715'},
{'Clk': '195', '50%': '5.295', '100%': '4.765'},
{'Clk': '200', '50%': '5.395', '100%': '4.9'},
{'Clk': '205', '50%': '5.55', '100%': '4.970000000000001'},
{'Clk': '210', '50%': '5.68', '100%': '5.005'},
{'Clk': '215', '50%': '5.725', '100%': '5.08'},
{'Clk': '220', '50%': '5.85', '100%': '5.215'},
{'Clk': '225', '50%': '6.03', '100%': '5.35'},
{'Clk': '230', '50%': '6.140000000000001', '100%': '5.395'},
{'Clk': '235', '50%': '6.074999999999999', '100%': '5.37'},
{'Clk': '240', '50%': '6.02', '100%': '5.345'},
{'Clk': '245', '50%': '6.025', '100%': '5.49'},
{'Clk': '290', '50%': '5.67', '100%': '5.37'}]
#print(data_list)
#print('\n'*3)
Clk = []
av_50 = []
av_100 = []
for dicty in data_list:
for k,v in dicty.items():
#print(" ", v)
if k == "Clk":
Clk.append(dicty["Clk"])
if k == "50%":
av_50.append(dicty["50%"])
if k == "100%":
av_100.append(dicty["100%"])
print('\n'*3)
print(Clk)
print('\n')
print(av_50)
print('\n')
print(av_100)
输出
['190', '195', '200', '205', '210', '215', '220', '225', '230', '235', '240', '245', '290']
['5.3149999999999995', '5.295', '5.395', '5.55', '5.68', '5.725', '5.85', '6.03', '6.140000000000001', '6.074999999999999', '6.02', '6.025', '5.67']
['4.715', '4.765', '4.9', '4.970000000000001', '5.005', '5.08', '5.215', '5.35', '5.395', '5.37', '5.345', '5.49', '5.37']
您可以使用zip浏览字典,并将3个字段映射到各个列表:
data_list = [{'Clk': '190', '50%': '5.3149999999999995', '100%': '4.715'},
{'Clk': '195', '50%': '5.295', '100%': '4.765'},
{'Clk': '200', '50%': '5.395', '100%': '4.9'},
{'Clk': '205', '50%': '5.55', '100%': '4.970000000000001'},
{'Clk': '210', '50%': '5.68', '100%': '5.005'},
{'Clk': '215', '50%': '5.725', '100%': '5.08'},
{'Clk': '220', '50%': '5.85', '100%': '5.215'},
{'Clk': '225', '50%': '6.03', '100%': '5.35'},
{'Clk': '230', '50%': '6.140000000000001', '100%': '5.395'},
{'Clk': '235', '50%': '6.074999999999999', '100%': '5.37'},
{'Clk': '240', '50%': '6.02', '100%': '5.345'},
{'Clk': '245', '50%': '6.025', '100%': '5.49'},
{'Clk': '290', '50%': '5.67', '100%': '5.37'}
]
Clk, av_50, av_100 = map(list,zip(*((d["Clk"],d["50%"],d["100%"]) for d in data_list)))
print(Clk)
print(av_50)
print(av_100)
['190', '195', '200', '205', '210', '215', '220', '225', '230', '235', '240', '245', '290']
['5.3149999999999995', '5.295', '5.395', '5.55', '5.68', '5.725', '5.85', '6.03', '6.140000000000001', '6.074999999999999', '6.02', '6.025', '5.67']
['4.715', '4.765', '4.9', '4.970000000000001', '5.005', '5.08', '5.215', '5.35', '5.395', '5.37', '5.345', '5.49', '5.37']
对于更一般化的公式,可以将键与列表分开:
keys = ("Clk","50%","100%")
Clk,av_50,av_100 = map(list,zip(*(map(d.get,keys) for d in data_list)))
这将允许创建通用密钥提取函数:
def listKeys(D,*keys):
return map(list,zip(*(map(d.get,keys) for d in D)))
Clk,av_50,av_100 = listKeys(data_list,"Clk","50%","100%")
您可以使用zip浏览字典,并将3个字段映射到各个列表:
data_list = [{'Clk': '190', '50%': '5.3149999999999995', '100%': '4.715'},
{'Clk': '195', '50%': '5.295', '100%': '4.765'},
{'Clk': '200', '50%': '5.395', '100%': '4.9'},
{'Clk': '205', '50%': '5.55', '100%': '4.970000000000001'},
{'Clk': '210', '50%': '5.68', '100%': '5.005'},
{'Clk': '215', '50%': '5.725', '100%': '5.08'},
{'Clk': '220', '50%': '5.85', '100%': '5.215'},
{'Clk': '225', '50%': '6.03', '100%': '5.35'},
{'Clk': '230', '50%': '6.140000000000001', '100%': '5.395'},
{'Clk': '235', '50%': '6.074999999999999', '100%': '5.37'},
{'Clk': '240', '50%': '6.02', '100%': '5.345'},
{'Clk': '245', '50%': '6.025', '100%': '5.49'},
{'Clk': '290', '50%': '5.67', '100%': '5.37'}
]
Clk, av_50, av_100 = map(list,zip(*((d["Clk"],d["50%"],d["100%"]) for d in data_list)))
print(Clk)
print(av_50)
print(av_100)
['190', '195', '200', '205', '210', '215', '220', '225', '230', '235', '240', '245', '290']
['5.3149999999999995', '5.295', '5.395', '5.55', '5.68', '5.725', '5.85', '6.03', '6.140000000000001', '6.074999999999999', '6.02', '6.025', '5.67']
['4.715', '4.765', '4.9', '4.970000000000001', '5.005', '5.08', '5.215', '5.35', '5.395', '5.37', '5.345', '5.49', '5.37']
对于更一般化的公式,可以将键与列表分开:
keys = ("Clk","50%","100%")
Clk,av_50,av_100 = map(list,zip(*(map(d.get,keys) for d in data_list)))
这将允许创建通用密钥提取函数:
def listKeys(D,*keys):
return map(list,zip(*(map(d.get,keys) for d in D)))
Clk,av_50,av_100 = listKeys(data_list,"Clk","50%","100%")
我建议使用
pandas.DataFrame
非常方便
import pandas as pd
data_list = [{'Clk': '190', '50%': '5.3149999999999995', '100%': '4.715'},
{'Clk': '195', '50%': '5.295', '100%': '4.765'},
{'Clk': '200', '50%': '5.395', '100%': '4.9'},
{'Clk': '205', '50%': '5.55', '100%': '4.970000000000001'},
{'Clk': '210', '50%': '5.68', '100%': '5.005'},
{'Clk': '215', '50%': '5.725', '100%': '5.08'},
{'Clk': '220', '50%': '5.85', '100%': '5.215'},
{'Clk': '225', '50%': '6.03', '100%': '5.35'},
{'Clk': '230', '50%': '6.140000000000001', '100%': '5.395'},
{'Clk': '235', '50%': '6.074999999999999', '100%': '5.37'},
{'Clk': '240', '50%': '6.02', '100%': '5.345'},
{'Clk': '245', '50%': '6.025', '100%': '5.49'},
{'Clk': '290', '50%': '5.67', '100%': '5.37'}]
my_data=pd.DataFrame(data_list)
clk = my_data['Clk'].tolist()
clk
关于我建议使用
pandas.DataFrame
非常方便
import pandas as pd
data_list = [{'Clk': '190', '50%': '5.3149999999999995', '100%': '4.715'},
{'Clk': '195', '50%': '5.295', '100%': '4.765'},
{'Clk': '200', '50%': '5.395', '100%': '4.9'},
{'Clk': '205', '50%': '5.55', '100%': '4.970000000000001'},
{'Clk': '210', '50%': '5.68', '100%': '5.005'},
{'Clk': '215', '50%': '5.725', '100%': '5.08'},
{'Clk': '220', '50%': '5.85', '100%': '5.215'},
{'Clk': '225', '50%': '6.03', '100%': '5.35'},
{'Clk': '230', '50%': '6.140000000000001', '100%': '5.395'},
{'Clk': '235', '50%': '6.074999999999999', '100%': '5.37'},
{'Clk': '240', '50%': '6.02', '100%': '5.345'},
{'Clk': '245', '50%': '6.025', '100%': '5.49'},
{'Clk': '290', '50%': '5.67', '100%': '5.37'}]
my_data=pd.DataFrame(data_list)
clk = my_data['Clk'].tolist()
clk
关于Felix的答案是有效的,但是如果您想检查钥匙是否存在,您可以这样做:
data_list = [
{'Clk': '190', '50%': '5.3149999999999995', '100%': '4.715'},
{'Clk': '195', '50%': '5.295', '100%': '4.765'},
{'Clk': '200', '50%': '5.395', '100%': '4.9'},
{'Clk': '205', '50%': '5.55', '100%': '4.970000000000001'},
{'Clk': '210', '50%': '5.68', '100%': '5.005'},
{'Clk': '215', '50%': '5.725', '100%': '5.08'},
{'Clk': '220', '50%': '5.85', '100%': '5.215'},
{'Clk': '225', '50%': '6.03', '100%': '5.35'},
{'Clk': '230', '50%': '6.140000000000001', '100%': '5.395'},
{'Clk': '235', '50%': '6.074999999999999', '100%': '5.37'},
{'Clk': '240', '50%': '6.02', '100%': '5.345'},
{'Clk': '245', '50%': '6.025', '100%': '5.49'},
{'Clk': '290', '50%': '5.67', '100%': '5.37'}
]
Clk = [dicty["Clk"] for dicty in data_list if "Clk" in dicty.keys()]
av_50 = [dicty["50%"] for dicty in data_list if "50%" in dicty.keys()]
av_100 = [dicty["100%"] for dicty in data_list if "100%" in dicty.keys()]
Felix的答案是可行的,但如果您想继续检查密钥是否存在,您可以这样做:
data_list = [
{'Clk': '190', '50%': '5.3149999999999995', '100%': '4.715'},
{'Clk': '195', '50%': '5.295', '100%': '4.765'},
{'Clk': '200', '50%': '5.395', '100%': '4.9'},
{'Clk': '205', '50%': '5.55', '100%': '4.970000000000001'},
{'Clk': '210', '50%': '5.68', '100%': '5.005'},
{'Clk': '215', '50%': '5.725', '100%': '5.08'},
{'Clk': '220', '50%': '5.85', '100%': '5.215'},
{'Clk': '225', '50%': '6.03', '100%': '5.35'},
{'Clk': '230', '50%': '6.140000000000001', '100%': '5.395'},
{'Clk': '235', '50%': '6.074999999999999', '100%': '5.37'},
{'Clk': '240', '50%': '6.02', '100%': '5.345'},
{'Clk': '245', '50%': '6.025', '100%': '5.49'},
{'Clk': '290', '50%': '5.67', '100%': '5.37'}
]
Clk = [dicty["Clk"] for dicty in data_list if "Clk" in dicty.keys()]
av_50 = [dicty["50%"] for dicty in data_list if "50%" in dicty.keys()]
av_100 = [dicty["100%"] for dicty in data_list if "100%" in dicty.keys()]
基本(和最佳)解决方案,无需任何额外库:
clk=[]
av_50=[]
av_100=[]
对于数据列表中的项目:
clk.追加(项目['clk'])
av_50.附加(项目['50%'))
av_100.附加(项目['100%'))
打印(时钟)
打印(AVU 50)
打印(AVU 100)
更优雅的列表理解解决方案,但效率较低,因为它需要对数据列表进行三次迭代,而不是以前的方法只需要一次
clk=[]
av_50=[]
av_100=[]
clk=[数据列表中项目的项目['clk']
av_50=[数据列表中项目的项目['50%”]
av_100=[数据_列表中项目的项目['100%”]
打印(时钟)
打印(AVU 50)
打印(AVU 100)
基本(和最佳)解决方案,无需任何额外库:
clk=[]
av_50=[]
av_100=[]
对于数据列表中的项目:
clk.追加(项目['clk'])
av_50.附加(项目['50%'))
av_100.附加(项目['100%'))
打印(时钟)
打印(AVU 50)
打印(AVU 100)
更优雅的列表理解解决方案,但效率较低,因为它需要对数据列表进行三次迭代,而不是以前的方法只需要一次
clk=[]
av_50=[]
av_100=[]
clk=[数据列表中项目的项目['clk']
av_50=[数据列表中项目的项目['50%”]
av_100=[数据_列表中项目的项目['100%”]
打印(时钟)
打印(AVU 50)
打印(AVU 100)
使用动态数据收集可能会很方便,以防您的dict结构会随着时间的推移而改变。这将适用于您的数据\u列表
:
def explode(data_list):
keys = list(data_list[0].keys())
values = [[d[k] for k in keys] for d in data_list]
return keys, values
keys, values = explode(data_list)
然后打印(按键)
输出
['Clk', '50%', '100%'`]
和打印(值)
:
使用动态数据收集可能会很方便,以防您的dict结构可能会随着时间的推移而改变。这将适用于您的
数据\u列表
:
def explode(data_list):
keys = list(data_list[0].keys())
values = [[d[k] for k in keys] for d in data_list]
return keys, values
keys, values = explode(data_list)
然后打印(按键)
输出
['Clk', '50%', '100%'`]
和打印(值)
:
您可以使用列表理解,但它不会有效,因为它会对列表进行三次迭代,而不是当前解决方案。您可以使用列表理解,但它不会有效,因为它会对列表进行三次迭代,而不是当前解决方案。好的一行程序总是让我高兴,好的一行程序,没有看到如何组合这三个:)在本例中,您能告诉我如何查找*的功能吗?*运算符将迭代器解包到zip()函数的各个参数中。有关解包的更多详细信息,请参见此处:啊,这很有意义!非常感谢,我以后会用到:)你是让我的OneLiner更高效的英雄:)好的OneLiner总是让我快乐,好的OneLiner,没有看到如何组合这三个:)在本例中,您能告诉我如何查找*的功能吗?*运算符将迭代器解包到zip()函数的各个参数中。有关解包的更多详细信息,请参见此处:啊,这很有意义!非常感谢,我以后会用到:)你是让我的OneLiner更高效的英雄:)