【问题标题】:Determine if a value is in a list value in a dictionary确定一个值是否在字典的列表值中
【发布时间】:2019-12-13 02:36:47
【问题描述】:

我已将此问题视为重复问题(到目前为止,我的所有问题似乎都是重复的)

我的代码

#UAA + UAG + UGA = STOP
n = 3

xdict = {
    "Phenylalanine": ["UUU", "UUC"],
    "Leucine": ["UUA", "CUU", "CUC", "CUA", "CUG", "UUG"],
    "Isoleucine": ["AUU", "AUC", "AUA"],
    "Methionine": "AUG",
    "Valine": ["GUU", "GUC", "GUA", "GUG"],
    "Serine": ["UCU", "UCC", "UCA", "UCG"],
    "Proline": ["CCU", "CCC", "CCA", "CCG"],
    "Threonine": ["ACU", "ACC", "ACA", "ACG"],
    "Alanine": ["GCU", "GCC", "GCA", "GCG"],
    "Tyrosine": ["UAU", "UAC"],
    "Histidine": ["CAU", "CAC"],
    "Glutamine": ["CAA", "CAG"],
    "Asparagine": ["AAU", "AAC"],
    "Lysine": ["AAA", "AAG"],
    "Asparatic Acid": ["GAU", "GAC"],
    "Glutamic Acid": ["GAA", "GAG"],
    "Cysteine": ["UGU", "UGC"],
    "Trytophan": "UGG",
    "Arginine": ["CGU", "CGC", "CGA", "CGG", "AGG", "AGA"],
    "Serine": ["AGU", "AGC"],
    "Glycine": ["GGU", "GGC", "GGA", "GGG"]
}

lookup_dict = {k: key for key, values in xdict.items() for k in values}
a = input("Enter your DNA sequence: ")
a = a.upper()
print("Your DNA sequence is", a)
str(a)
RNA = a.replace("C", "G")
RNA = a.replace("A", "U")
RNA = a.replace("T", "A")
print("Your RNA strand is", RNA)

b = len(a)

if b % 3 == 0:
  for k in [a[i:i + n] for i in range(0, len(a), n)]:
    if k in xdict.values(): #checking from other question
      print(lookup_dict[k], end=" ")
    elif k not in xdict.values(): #checking from other question
      print("I hate u")

elif b % 3 != 0:
  print("Try again.")

我已经尝试了来自this 链接的答案,但它对我不起作用。 python 如何检测一个值是否在字典中?

【问题讨论】:

  • @cricket_007 我会编辑以便检查清楚。
  • 请注意,您处理单个值将需要额外的代码。您可以将它们放在 1 的列表中以保持一致。另请注意,遍历字符串会为您提供单个字符——可能不是有意的。 (也可以通过将其放入 1 列表中来修复)
  • 如果相同的序列碰巧出现在两个不同列表中的某处,您也可能会遇到问题。查找字典只能记住其中一个,除非它还有值列表。
  • 如果您不请求输入会有所帮助。相反,请准确说出您要寻找的价值,这样我们就可以具体了解为什么找不到它。
  • 这些数据是从哪里来的?这当然不理想。

标签: python python-3.x dictionary


【解决方案1】:

您正在检查一个字符串是否在 列表列表 以及一些字符串中,因此除非您尝试搜索那些单独的字符串,否则它将返回 false。

您要么必须查找键,然后检查您的字符串是否在该键的列表值中,或者像这样遍历所有值(您已经在做),然后检查它是否在 字典值的列表

if b % 3 == 0:
  for _, values in xdict.items():
    for k in (a[i:i + n] for i in range(0, len(a), n)):
      if k in values:
        print(lookup_dict[k], end=" ")
      else
        print("I hate u")

【讨论】:

  • 查找字典的键是在迭代原始值的多个值之后创建的。 (尽管在单个字符串上会出错)
  • @cricket_007 当我打印出来时,它会重复“我讨厌你”一段时间,然后是我的第一部分答案,然后是下一部分,依此类推,直到结果正确......我该怎么做解决这个问题?
  • 我不确定我是否理解查找字典的意义,但我的回答更侧重于第一个字典
  • 查找字典的目的是因为他们想要搜索值。您不能在 dict 上执行此操作,该 dict 旨在通过键快速查找内容。
  • @cricket_007 查找字典定义是在字典中查找值。但是,它不进行错误处理。
【解决方案2】:

您可以使用 pandas 来执行此操作,这是一种很好的搜索方式:

import pandas as pd
df =  pd.DataFrame(list(xdict.items()))


def lookupKey(df, key):
  return df[df[1].apply(lambda x: True if key in x else x) == True][0].reset_index()[0][0]

lookupKey(df, 'CGU')
# 'Arginine'

【讨论】:

  • [df[1].apply(lambda x: True if key in x else x) == True] --> [df[1].apply(lambda x: True if key in x else x) is True] --> [df[1].apply(lambda x: True if key in x else x)] 我也无法像这样构建一个DataFrame,我得到ValueError: If using all scalar values, you must pass an index
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-16
  • 2018-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-17
相关资源
最近更新 更多