获取以索引为导向的嵌套字典中的键和值列表
Posted
技术标签:
【中文标题】获取以索引为导向的嵌套字典中的键和值列表【英文标题】:Get a list of keys and values in a nested dictionary oriented by index 【发布时间】:2018-01-23 11:36:48 【问题描述】:我有一个结构如下的 Excel 文件:
name age status
anna 35 single
petr 27 married
我已将这样的文件转换为嵌套字典,其结构如下:
'anna': 'age':35, 'status': 'single',
'petr': 'age':27, 'status': 'married'
使用熊猫:
import pandas as pd
df = pd.read_excel('path/to/file')
df.set_index('name', inplace=True)
print(df.to_dict(orient='index'))
但现在当运行list(df.keys())
时,它会返回字典中所有键的列表(“年龄”、“状态”等),但不会返回“姓名”。
我的最终目标是通过键入名称返回所有键和值。
有可能吗?或者也许我应该使用其他方式来导入数据以实现目标?最终我还是应该找到一本字典,因为我会通过一个键将它与其他字典合并。
【问题讨论】:
【参考方案1】:我认为您需要参数drop=False
到set_index
才能不删除列Name
:
import pandas as pd
df = pd.read_excel('path/to/file')
df.set_index('name', inplace=True, drop=False)
print (df)
name age status
name
anna anna 35 single
petr petr 27 married
d = df.to_dict(orient='index')
print (d)
'anna': 'age': 35, 'status': 'single', 'name': 'anna',
'petr': 'age': 27, 'status': 'married', 'name': 'petr'
print (list(df.keys()))
['name', 'age', 'status']
【讨论】:
【参考方案2】:给定一个来自 excel 的数据框,你应该这样做以获得你想要的东西:
resulting_dict =
for name, info in df.groupby('name').apply(lambda x: x.to_dict()).iteritems():
stats =
for key, values in info.items():
if key != 'name':
value = list(values.values())[0]
stats[key] = value
resulting_dict[name] = stats
【讨论】:
【参考方案3】:试试这个:
import pandas as pd
df = pd.read_excel('path/to/file')
df[df['name']=='anna'] #Get all details of anna
df[df['name']=='petr'] #Get all details of petr
【讨论】:
谢谢,但我应该把它当作字典,并以某种方式将“名称”变成普通键 尝试:my_dict = df.set_index('name').transpose().to_dict(orient='list')
然后使用my_dict['anna']
和my_dict[
petr`]
它返回我:UserWarning: DataFrame columns are not unique, some columns will be omitted. "columns will be omitted.", UserWarning)
虽然列是唯一的以上是关于获取以索引为导向的嵌套字典中的键和值列表的主要内容,如果未能解决你的问题,请参考以下文章
显示 % forloop% 的键和值的 Django 模板:如何遍历模板中的字典?
如何在 C# 中的键和值列表上使用 Lambda 函数获取最大值和最小值?