【问题标题】:Accessing information from a dictionary从字典中访问信息
【发布时间】:2020-09-04 14:31:27
【问题描述】:

我有一本字典,这是第一部分(非常大)

           {'cluster-1': {'BGCid': '-',
           'cdhitclusters': [{'genes': {'AT1G24070': 100.0},
                              'rep_gene': 'AT1G24070'},
                             {'genes': {'AT1G24100': 100.0},
                              'rep_gene': 'AT1G24100'},
                             {'genes': {'AT1G24040': 100.0,
                                        'AT1G2404_1': 100.0,
                                        'AT1G2404_2': 100.0},
                              'rep_gene': 'AT1G24040'},
                             {'genes': {'AT1G24020': 100.0,
                                        'AT1G2402_1': 100.0},
                              'rep_gene': 'AT1G24020'},
                             {'genes': {'AT1G24010': 100.0},
                              'rep_gene': 'AT1G24010'},
                             {'genes': {'AT1G24000': 100.0},
                              'rep_gene': 'AT1G24000'}],

我想打印 key(?) 'rep_gene' 所持有的信息。但它说 rep_gene 不是关键。 什么是 rep_gene 以及如何制作包含 rep_gene 信息的数据框?

编辑

前两行有效,但最后一行返回:AttributeError: 'list' object has no attribute 'get'

clus1 = (gene_clusters.get("cluster-1"))
cdhit1 = (clus1.get("cdhitclusters"))
cdhit1.get("rep_gene")

【问题讨论】:

  • 您能告诉我们您尝试使用的索引吗?
  • @DownloadPizza 你能告诉我该怎么做吗?我对此很陌生
  • 把报错的代码贴一下,我想我能搞定
  • 我认为这就是您要的,如果不是,请澄清
  • 是的,我知道了,谢谢,很快就会发布答案

标签: python-3.x pandas dictionary


【解决方案1】:

您的cdhit1 包含以下列表:

[
   {
      "genes":{
         "AT1G24070":100.0
      },
      "rep_gene":"AT1G24070"
   },
   {
      "genes":{
         "AT1G24100":100.0
      },
      "rep_gene":"AT1G24100"
   },
   {
      "genes":{
         "AT1G24040":100.0,
         "AT1G2404_1":100.0,
         "AT1G2404_2":100.0
      },
      "rep_gene":"AT1G24040"
   },
   {
      "genes":{
         "AT1G24020":100.0,
         "AT1G2402_1":100.0
      },
      "rep_gene":"AT1G24020"
   },
   {
      "genes":{
         "AT1G24010":100.0
      },
      "rep_gene":"AT1G24010"
   },
   {
      "genes":{
         "AT1G24000":100.0
      },
      "rep_gene":"AT1G24000"
   }
]

因此您需要指定要使用的索引。我从来没有使用过熊猫,但也许可以试试cdhit1[0] 看看它会返回什么。您可能会注意到,您有多个以"rep_gene" 为键的元素。

【讨论】:

  • 是的,那么如何计算 rep_gene 在列表中出现的次数?我试过cdhit1.count(rep_gene),它返回 1
  • 您的元素每次都包含键 rep_gene,不是吗?我不太明白你想做什么?
  • 有时每个 rep_gene 都有多个基因。我只想计算有多少 rep_genes。我有 44 个这样的集群,我想知道每个集群有多少 rep_genes。
  • 我通过创建数据框并计算行数解决了这个问题。 rep1 = pd.DataFrame(cdhit1) len(rep1.rep_gene)
【解决方案2】:

这是一种使用内置 collections 包中的 Counter 的方法:

# use list-of-dict from above
cd_hit_clusters = [
{'genes': {'AT1G24070': 100.0}, 'rep_gene': 'AT1G24070'}, 
{'genes': {'AT1G24100': 100.0}, 'rep_gene': 'AT1G24100'}, 
{'genes': {'AT1G24040': 100.0, 'AT1G2404_1': 100.0, 'AT1G2404_2': 100.0}, 'rep_gene': 'AT1G24040'}, 
{'genes': {'AT1G24020': 100.0, 'AT1G2402_1': 100.0}, 'rep_gene': 'AT1G24020'}, 
{'genes': {'AT1G24010': 100.0}, 'rep_gene': 'AT1G24010'}, 
{'genes': {'AT1G24000': 100.0}, 'rep_gene': 'AT1G24000'}
]

现在使用Counter:

from collections import Counter
rep_gene_list = [ cd['rep_gene'] for cd in cd_hit_clusters ]
Counter(rep_gene_list)

# results
Counter({'AT1G24070': 1,
         'AT1G24100': 1,
         'AT1G24040': 1,
         'AT1G24020': 1,
         'AT1G24010': 1,
         'AT1G24000': 1})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-23
    • 1970-01-01
    • 2018-11-13
    • 2011-05-06
    相关资源
    最近更新 更多