【问题标题】:How can I append a list of values for single dictionary key (1_key : [N_values]) in Python?如何在 Python 中附加单个字典键 (1_key : [N_values]) 的值列表?
【发布时间】:2019-04-08 16:25:10
【问题描述】:

我正在尝试从 .txt 文件在 Python 中生成 {single-key : [multi-value]} 字典。

这是文本文件(制表符分隔),

A02.835.583.748      A02.880     0.818181818181818
A02.835.583.748      A02.513     0.818181818181818
A02.835.583.748      A01.378.800.750     0.636363636363636
A02.835.583      A02.880     0.863636363636364
A02.835.583      A02.513     0.863636363636364
A02.835.583      A01.378.800.750     0.681818181818182
A01.378.800.750      A02.880     0.727272727272727
A01.378.800.750      A02.513     0.727272727272727
A01.378.800.750      A01.378.800.750     1

同样,我使用“defaultdict()”函数,但不知何故我无法正确生成字典。我可以通过这个生成字典,但这很奇怪。因此,我从这本奇怪的字典中获取其中一个键。

print(anaDict.get('A02.835.583.748'))

输出:

['A02.880=0.818181818181818', [...], ['A02.513=0.818181818181818'], ['A01.378.800.750=0.636363636363636']]

然而,这个字典中的 [...] 实际上是以一种初始的方式嵌套同一个键的其他值。

我写的代码,

anaDict = defaultdict()
anaSet = set()
with open(f, 'r') as anaFile:
    if '148' in f:
        for line in anaFile:
            key = line.split('\t')[0].rstrip()
            conclusionVal = line.split('\t')[1].strip()
            simScore = line.split('\t')[2].strip()
            value = [conclusionVal + "=" + simScore]
            if key not in anaDict:
                print("Here it goes: " , key, value)
                anaDict[key] = value                    
            if key in anaDict:
                print("Different value: ", key, value)
                anaDict[key].append(value)

        print(anaDict.get('A02.835.583.748'))

我希望代码生成以下字典(显示为键值对)。

A02.835.583.748 : [A02.880 = 0.818181818181818 , A02.513 = 0.818181818181818,  A01.378.800.750 = 0.636363636363636]
A02.835.583 : [A02.880 = 0.863636363636364, A02.513 = 0.863636363636364, A01.378.800.750 = 0.681818181818182]
A01.378.800.750 : [A02.880 = 0.727272727272727, A02.513  = 0.727272727272727, A01.378.800.750 = 1]

我无法弄清楚我做错了什么。我会为任何帮助或方向提供帮助。

【问题讨论】:

    标签: python-3.x dictionary multi-value-dictionary


    【解决方案1】:

    这行是你的问题:

    anaDict[key].append(value)
    

    当您使用list#append 时,您将整个参数放入列表中。但是由于您要传递一个列表,因此您将一个列表放入列表中。您所描述的想要做的是附加参数列表中的所有值,而不是列表本身。您所要做的就是将append 替换为extend

    anaDict[key].extend(value)
    

    然后你告诉解释器解包参数列表并附加每个值。

    【讨论】:

      【解决方案2】:

      根据@mypetlion(有效)的建议修改的代码在下面更新。

      anaDict = defaultdict()
      anaSet = set()
      #print(f)
      with open(f, 'r') as anaFile:
          if '148' in f:
              for line in anaFile:
                  key = line.split('\t')[0].rstrip()
                  conclusionVal = line.split('\t')[1].strip()
                  simScore = line.split('\t')[2].strip()
                  value = [conclusionVal + "=" + simScore]
                  if key not in anaDict:
                      anaDict[key] = value
                  if key in anaDict:
                      anaDict[key].extend(value)
      

      【讨论】:

        猜你喜欢
        • 2020-04-09
        • 2016-04-04
        • 1970-01-01
        • 2020-12-06
        • 1970-01-01
        • 2022-01-06
        • 1970-01-01
        • 2019-11-07
        • 2020-12-06
        相关资源
        最近更新 更多