【问题标题】:Trying to create a function that returns a key of "strings" based on a value of "integers" from a dictionary尝试创建一个函数,该函数根据字典中的“整数”值返回“字符串”键
【发布时间】:2020-08-31 12:39:45
【问题描述】:
data = Sig_List.readlines()
N, E = [], []
for line in data:
    values = [str(s) for s in line.split()]
    N.append(values[0])
    E.append(values[1])

    Sig1 = dict(zip(N,E))
    Sig1={'Atg4a': '1.0241564267288767', 'Mast2': '-1.0014505579938486',...}
       
def up1(Sig1):
    for key, value in Sig1.items():
        if value >0:
            x=list(key)
    
up1(Sig1)

尝试输入带有 FC 值的基因名称列表,然后生成上下基因的子列表,这些子列表可以组合起来在不同的实验中制作维恩图。无法定义条件函数,该函数仅根据基因名称是向上还是向下返回基因名称。任何帮助或建议将不胜感激。

【问题讨论】:

  • 我不确定我是否完全理解您的问题。你想要一个函数来列出所有满足某个属性的基因名称吗?如果是这样,您可以简单地通过列表理解来做到这一点:[x for x in Sig1 if float(Sig1[x]) > 0] 如果您希望所有名称都具有正值。
  • 这正是我所需要的!谢谢

标签: python function dictionary


【解决方案1】:

让我们用字典理解来做:

我们将循环字典键和值并按值条件过滤。

Sig_List = open('file.txt')
data = Sig_List.readlines()
N, E = [], []
for line in data:
    values = [str(s) for s in line.split()]
    N.append(values[0])
    E.append(values[1])

    Sig1 = dict(zip(N, E))
    Sig1 = {'Atg4a': '1.0241564267288767', 'Mast2': '-1.0014505579938486'}


def up1(Sig1):
    return [key for key, value in Sig1.items() if float(value) > 0]

def down1(Sig1):
    return [key for key, value in Sig1.items() if float(value) < 0]

ups     = up1(Sig1)
print(f'Ups: {ups}')

downs   = down1(Sig1)
print(f'Downs: {downs}')

这些函数可以集成到一个函数中,因此我们将第二次迭代保存在列表中:

def diveide_by_directon(Sig1):
    ups     = []
    downs   = []
    for key, value in Sig1.items():
        if 0 < float(value):
            ups.append(key)
        else:
            downs.append(key)
    return ups, downs

ups, downs     = diveide_by_directon(Sig1)
print(f'Ups: {ups}')
print(f'Downs: {downs}')

【讨论】:

    【解决方案2】:

    你可以在字典理解中做到这一切:

    data = Sig_List.readlines()
    Sig1 = {
        str(s)[0], str(s)[1] for s in line.split()
        for line in data
    }
    
    ups = {k, v for k, v in Sig1 if int(v) > 0}
    downs = {k, v for k, v in Sig1 if int(v) < 0}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多