[英]appending a list to a set of a result (dict)
我正在为一些工作准备代码。 我有一个 dataframe 如下图所示:
# initialize list of lists
data = [['1', 10, 50, 'ev', 'CA'], ['2', 15, 40, 'ev', 'CA'], ['3', 14, 60, 'ev', 'CN']]
# Create the pandas DataFrame
df = pd.DataFrame(data, columns = ['person_id', 'kwh', 'distance', 'type', 'country'])
# print dataframe.
df
我循环遍历df
的每一行,以便根据 dataframe 的一列计算一些东西。
dics = []
for i, row in df.iterrows():
# Retrieve person-ID
person = df['person_id'].tolist()
if row['type'] == 'ev':
cm.array.loc['Small','BEV','electricity consumption',:] = [[row['kwh_km']]]
---Some very long codes---
output = results.sel(impact_category='cc', year=2020, size='Small', value=0)\
.to_dataframe('impact') #selecting only cc
output_dict = dict(zip(['ex', 'ne', 'ec',
'ma', 'gl', 'eo', 'po',
'es', 'ro'], output.impact))
dics.append({person: {output_dict}}) #assigning person id to each result in a dict
问题:我试图获取一个列表person_id
并且在代码末尾,我试图在output_dict
中创建一个结果字典。 现在我有一个列表和一个字典,我想在 dics 中对它们进行dics
,但这对我不起作用。 它抛出了一个错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-164-da106d6e5fc2> in <module>
19 'ma', 'gl', 'eo', 'po',
20 'es', 'ro'], output.impact))
---> 21 dics.append({person: {output_dict}})
TypeError: unhashable type: 'dict'
我希望 output 如下所示(示例):根据 dataframe 中的每个person_id
的output_dict
。
[{'1':{'ex': 0.0,
'ne': 0.0,
'ec': 0.0,
'ma': 0.0,
'gl': 0.0,
'eo': 0.0,
'po': 0.0,
'es': 0.0,
'ro': 0.0}},
{'2':{'ex': 0.0,
'ne': 0.0,
'ec': 0.0,
'ma': 0.0,
'gl': 0.0,
'eo': 0.0,
'po': 0.0,
'es': 0.0,
'ro': 0.0}},
{'3':{'ex': 0.0,
'ne': 0.0,
'ec': 0.0,
'ma': 0.0,
'gl': 0.0,
'eo': 0.0,
'po': 0.0,
'es': 0.0,
'ro': 0.0}}]
很抱歉我删除了“一些非常长的代码”中的一些代码。 非常感谢您的帮助和建议。 先感谢您。
看起来您正在创建将一个人的 id 附加到一组结果,而不是一个 id 到结果。
output_dict
周围的花括号表示您正在创建一组字典。 由于字典不可散列 python 引发错误。 如果您想将dics
保留为单个条目字典的列表,则删除这些花括号应该可以解决您的问题。
dics.append({person: output_dict})
但是,它可能会更好地为您提供服务,将dics
作为字典,以便您可以将所有 id 和结果存储在同一个地方,如下所示:
{'1':{'ex': 0.0,
'ne': 0.0,
'ec': 0.0,
'ma': 0.0,
'gl': 0.0,
'eo': 0.0,
'po': 0.0,
'es': 0.0,
'ro': 0.0},
'2':{'ex': 0.0,
'ne': 0.0,
'ec': 0.0,
'ma': 0.0
'gl': 0.0,
'eo': 0.0,
'po': 0.0,
'es': 0.0,
'ro': 0.0)
...
}
这将允许您更简单地提取结果。 在您最初尝试提取 id 1 的 persion 的结果时,您需要在列表中找到该条目,然后将数据从字典中拉出:
for data in dics:
if data.keys()[0] == "1":
result = data["1"]
# do something with result
这是非常冗长和缓慢的。 但是通过将它们存储为单个字典,您可以立即访问它们:
result = dics["1"]
dics = dict()
# some code here...
dics[person] = output_dict
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.