繁体   English   中英

将列表附加到一组结果(dict)

[英]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_idoutput_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM