【问题标题】:Updating dictionary within loops在循环内更新字典
【发布时间】:2021-12-25 03:06:45
【问题描述】:

我有一个字典列表,其中键是“group_names”,值是基因列表。

我想通过循环遍历一个species_list,用一个新的基因列表更新每个字典。

这是我的伪代码:

groups=["group1", "group2"]
species_list=["spA", "spB"]
    
def get_genes(group,sp)
    return gene_list

for sp in species_list:
    for group in groups:
        gene_list[group]=get_genes(group,sp)
        gene_list.update(get_genes(group,sp))

这段代码的问题是新基因被之前的基因替换/覆盖,而不是被添加到字典中。我的问题是我应该把下面这行放在哪里。虽然,我不确定这是否是唯一的问题。

gene_list.update(get_genes(group,sp))

我拥有的数据看起来像这样的数据框:

data={"group1":["geneA1", "geneA2"],
      "group2":[ "geneB1","geneB2"]}
pd.DataFrame.from_dict(data).T

我要创建的数据应该是这样的:

data={"group1":["geneA1", "geneA2", "geneX"],
      "group2":[ "geneB1","geneB2", "geneX"]}
pd.DataFrame.from_dict(data).T

所以在这种情况下,“gene_x”是指通过get_genes函数为每个物种获取的新基因,并最终更新到现有的字典中。

任何帮助将不胜感激!

【问题讨论】:

    标签: python loops dictionary


    【解决方案1】:

    您需要追加到字典条目中的列表,而不是分配它。

    如果字典键尚不存在,请使用 setdefault() 提供默认的空列表。

    for sp in species_list:
        for group in groups:
            gene_list.setdefault(group, []).extend(get_genes(group, sp))
    

    【讨论】:

    • 好吧,现在它解决了问题,但又创建了另一个问题。
    • spA=["geneA1", "geneA2"] spB=["geneB1","geneB2" ] b={'group1': [ spA ], "group2": [ spB] } pd .DataFrame(b) a={'group1': spA , "group2": spB} pd.DataFrame(a)
    • 我不明白你想在那里展示什么。
    • 所以现在我的数据框看起来像一个。但我希望它像 b。
    • 您询问了如何更新词典。我的代码应该这样做。如果您没有从中获得所需的数据帧,那就是另一个问题了。
    【解决方案2】:

    据我了解,您想将新基因附加到每个键上,以便做到这一点:

    new_gene = "gene_x"
    data={"group1":["geneA1", "geneA2"], "group2":[ "geneB1","geneB2"]}
    
    for value in data.values():
        value.append(new_gene)    
    
    print(data)
    

    您还可以在可以直接附加的地方使用 defaultdict(请阅读相关文档)。

    【讨论】:

    • 这个答案中的groups在哪里?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    • 2018-09-29
    • 2020-03-14
    • 1970-01-01
    相关资源
    最近更新 更多