【问题标题】:How to populate dictionary using loop如何使用循环填充字典
【发布时间】:2018-07-18 14:28:38
【问题描述】:

我有两个名为 res_listfina_list 的列表。我希望res_list 的第一个成员作为键,fina_list 的第一个成员作为值,依此类推。两个列表的长度相同。我已经编写了以下代码,但我没有得到答案,请帮助我。

for i in range(0, len(prot_temp)):
    dict_dist[res_list_count[i]] = fina_val[i]
print (dict_dist)

res_list = ['LYS', 'LYS', 'LYS', 'LYS', 'ARG', 'LYS', 'LYS', 'LYS', 'ARG', 'LYS', 'LYS', 'ARG'、'LYS'、'ARG'、'LYS'、'LYS'、'ARG'、'LYS'、'ARG'、'ARG'、'ARG'、'LYS'、'LYS'、'LYS ', 'LYS', 'LYS'] 和fina_val = [['90', 30.390685694798005], ['91', 33.017900690383094], ['99', 25.200985952934463], ['104', 19.147762813'13'13 , 20.365273138359818], ['114', 21.71637709195528], ['135', 29.452559922696025], ['138', 24.335606731700775]] 但是当我按照你说的做的时候,我很高兴回答:{'3LY2 ', 25.757180610462783], 'ARG': ['282', 17.118237438474793]} 我哪里错了?

【问题讨论】:

标签: python dictionary hashtable


【解决方案1】:

您可以使用zipdictionary comprehension

d = {k:v for k,v in zip(res_list, fina_list)}

另外,正如Peter 指出的那样,可以做到dict(zip(res_list, fina_list)


一些更明确的(也许更少Python(ic)方式)

您可以遍历 zip 以使其更加明确。

d = {}
for k,v in zip(res_list, fina_list):
    d[k] = v

您甚至可以使用索引遍历列表。

d = {}
for i in range(min(len(res_list), len(fina_list)):
    d[res_list[i]] = fina_list[i]

如果这些对您来说更清楚。然而,python 的部分优点在于它简洁同时保持清晰

【讨论】:

  • 或者只使用dict构造函数,它可以接受元组对:dict(zip(keys, values))
  • @PeterWood 不过那将是完全重复的。见评论部分。
  • @scharette 一个全面的答案可以提到不止一种方法。另外,当我发表评论时,答案并不存在。
  • @PeterWood 不,你误会了我。你的洞察力真的很好。实现这一点实际上是最好的。我的意思是,我在 cmets 部分中包含了一个完全相同的副本。
【解决方案2】:

dict 的构造函数接受(key, value) 对的序列, 所以你可以用

来实现它
dict(zip(res_list, fina_list))

【讨论】:

  • res_list = ['LYS','LYS','LYS','LYS','ARG','LYS','LYS','LYS','ARG','LYS' , '赖氨酸', 'ARG', '赖氨酸', 'ARG', '赖氨酸', '赖氨酸', 'ARG', '赖氨酸', 'ARG', 'ARG', 'ARG', '赖氨酸', ' LYS', 'LYS', 'LYS', 'LYS'] 和fina_val = [['90', 30.390685694798005], ['91', 33.017900690383094], ['99', 25.200985952934463], ['104', 19.1473]76 , ['113', 20.365273138359818], ['114', 21.71637709195528], ['135', 29.452559922696025], ['138', 24.335606731700775]] 但是当我按照你说的做的时候,我很高兴回答:{' ': ['302', 25.757180610462783], 'ARG': ['282', 17.118237438474793]} 我哪里错了?
  • 既然你在 res_list 中复制了,你需要决定一个合适的方法来处理它。字典不能有重复的键(原因很明显)
  • 糟糕,我做不到?
  • 您可以使用列表中的相同键聚合值或重命名键以避免重复。
  • 请用res_listfina_val这些示例更新您的问题,因为这是一个重点
猜你喜欢
  • 1970-01-01
  • 2020-05-30
  • 1970-01-01
  • 1970-01-01
  • 2015-07-28
  • 2021-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多