如何在Python中附加单个字典键(1_key:[N_values])的值列表?

时间:2019-04-08 16:25:11

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

我试图用Python从.txt文件中生成一个{单键:[多值]}字典。

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

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]

我无法弄清楚我做错了什么。我将为您提供任何帮助或指导。

2 个答案:

答案 0 :(得分:1)

这行是您的问题:

anaDict[key].append(value)

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

anaDict[key].extend(value)

然后,您要告诉解释器解压缩参数列表并附加每个值。

答案 1 :(得分:0)

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

 nuxtClientInit: async function({ commit }, { route, store }) {
    console.log('start')
    const workbox = await window.$workbox
    if (workbox) {
      console.log('in workbox') // the final line that executes correctly
      caches.open(workbox.core.cacheNames.runtime).then(cache => { // error here
        console.log('cache await')
        // doing the axios request depending on variable parameters here
      })
    }
  }