Python:在字典列表中有条件地创建新键

Python:在字典列表中有条件地创建新键,python,dictionary,Python,Dictionary,我有一个字典列表,如下所示: [ {'stim': 'I', 'condition1': 0, 'condition2': 1, 'condition3': 0}, {'stim': 'nev,er.', 'condition1': 0, 'condition2': 1, 'condition3': 0}, {'stim': 'he,si,ta,te', 'condition1': 0, 'condition2': 1, 'condition3': 1}, {'stim': 'while', '

我有一个字典列表,如下所示:

[
{'stim': 'I', 'condition1': 0, 'condition2': 1, 'condition3': 0},
{'stim': 'nev,er.', 'condition1': 0, 'condition2': 1, 'condition3': 0},
{'stim': 'he,si,ta,te', 'condition1': 0, 'condition2': 1, 'condition3': 1},
{'stim': 'while', 'condition1': 0, 'condition2': 1, 'condition3': 1},
{'stim': 'dri,ving', 'condition1': 0, 'condition2': 1, 'condition3': 0}, etc.]
我想说的是以下结果:

[
    {'stim': 'I', 'condition1': 0, 'condition2': 1, 'condition3': 0},
    {'stim': 'nev', 'stim1':'er.','condition1': 0, 'condition2': 1, 'condition3': 0},
    {'stim': 'he', stim1:'si', stim2:'ta', stim3:'te.', 'condition1': 0, 'condition2': 1, 'condition3': 1},
    {'stim': 'while', 'condition1': 0, 'condition2': 1, 'condition3': 1},
    {'stim': 'dri','stim1': 'ving.', 'condition1': 0, 'condition2': 1, 'condition3': 0}, etc.]
只有当一个单词被逗号值连字符时,我才需要代码来创建与(剩余)音节值组合的附加键。我对编程相当陌生,而且我只了解以下方面:

for dict in list:
    if "," in (dict['stim']):
        dict.update({'word1':'syllable'})
我不知道如何添加所需数量的密钥。我也没有成功地得到相应值中的实际音节

非常感谢您的帮助。

这应该可以做到:

for d in inputlist:
    words = d['stim'].split(',')
    d['stim'] = words[0]
    d.update(('stim{}'.format(i), word) for i, word in enumerate(words[1:], 1))
这会将
d['stim']
替换为
上拆分的第一个值(如果不存在逗号,则可能仅为一个元素)。然后用一系列键值对更新字典,这些键值对是由其余单词及其索引(从1开始)生成的


我会改变dict和list的名字。我留下了它们,以便它们与您的示例代码匹配。

不要在代码中使用
list
dict
等名称;这些屏蔽了内置类型。为什么对一个键的字典使用
.update()
?然后你只需要做dict['stim'+str(index)]=音节就可以了。我用了你的代码,做了一些操作,想回到初始形式的词典列表。所以现在,我有:
{'stim':'he',stim1:'si',stim2:'ta',stim3:'te','condition1':0','condition2':…}
,我想回到
{'stim':'house','condition1':0',condition2':1',condition3':1}。
事实上,这个词不再包含逗号值。我写了以下内容,但这不起作用:
用于d输入列表:如果d中的'word1':stim_order['word'].append(stim_order['word1'])del stim_order[word1]
,我对单词2、3和4重复了这个序列。我做错了什么?@KnRm:字符串不是列表
stim_order['word']+=stim_order['word1']
会更好。我非常感谢你的回答,但我不太明白。我以为我是在把一个字符串附加到另一个字符串上?你的回答是什么,我从来没有遇到过
+=
,实际上是什么意思?@KnRm:你在连接一个字符串。另外,
list.append()
会就地更改列表,但字符串是不可变的(您不能就地更改它们,您需要创建一个由两个输入构建的新字符串);这同样适用于元组<代码>目标+=值与目标不可变时的
目标=目标+值
相同。谢谢,这很有帮助。我现在遇到了
类型错误:列表索引必须是整数,而不是str
for dict in list:
    if "," in (dict['stim']):
        result = dict['stim'].split(',') # get a list of individual syllables
        dict['stim'] = result.pop(0) # store the first syllable in the existing dict key
        for index, syllable in enumerate(result, 1): #for every other syllable update dict
            dict['stim'+str(index)] = syllable})