在Python中将值附加到列表中

时间:2017-03-30 22:45:36

标签: python list dictionary

我试图从字符串列表生成字典,以便:

  • 键是列表中的字符串
  • 键的值是紧跟在键后面的单词列表。

例如,

x = ['one', 'two', 'one', 'three', 'two']

结果:

{
    'one' : ['two', 'three']
    'two' : ['one']
    'three' : ['two']
}

现在我使用它的for循环给了我这个:

{
    'one' : ['two']
    'two' : ['one']
    'one' : ['three']
    'three' : ['two']
}

5 个答案:

答案 0 :(得分:1)

当然,有许多方法可以解决这个问题,但是给出了:

mylist = ['one', 'two', 'one', 'three', 'two']

一种可能的解决方案:(我想到的第一个)

mydict = {}
for counter, val in enumerate(mylist[0:-1]):
    mydict.setdefault(val, []).append(mylist[counter + 1])

我使用mylist[0:-1],因此我们只迭代到第二个最后一个元素

类似的解决方案是跟踪父母:

mydict = {}
parent = mylist[0]
for val in mylist[1:]:
    mydict.setdefault(parent, []).append(val)
    parent = val


[编辑:] 我从@ phihag的回答中了解了setdefault,并更新了我自己的。从本质上讲,它缩写为(所以我将其纳入上面的答案中):

if val not in mydict:
    mydict[val] = []

答案 1 :(得分:1)

使用zipdict.setdefault功能:

x = ['one', 'two', 'one', 'three', 'two']
d = {}
for el, follow in zip(x, x[1:]):
    d.setdefault(el, []).append(follow)
print(d)

答案 2 :(得分:1)

strcpy非常适合构造具有相同值类型的字典。在您的情况下,值类型是list:

defaultdict

答案 3 :(得分:0)

#is this what you want?
x = ['one', 'two', 'one', 'three', 'two']
result = {}
for i in range(len(x)-1):   
    result.update({x[i] : [x[j] for j in range(i+1,len(x))]})
#update the last entry    
result.update({x[len(x)-1] : [x[0]]})    
result  

{'one':['three','two'],'three':['two'],'two':['one']}

答案 4 :(得分:0)

不确定您的代码是什么样的,但您希望如何执行此操作:

  1. 创建新词典
  2. 遍历您的列表并比较词典中的每个键。
  3. 如果密钥在字典中,则添加密钥值对,否则将值附加到列出的值到该密钥值对的末尾。
  4. 您要使用集合的原因是为了删除可能遇到的任何可能的重复项。您希望将其转换为列表,因为您的值是列表格式。

    x = ['one', 'two', 'one', 'three', 'two']
    my_dict = {}
    for i in range(len(x) - 1):
       if x[i] is not in my_dict.keys():
           my_dict[x[i]] = [x[i + 1]]
       else:
           my_dict[x[i]].append(x[i + 1])
    

    最后,my_dict就是你想要的。