修改字典中列表的内容

时间:2014-07-18 20:47:12

标签: python string object for-loop dictionary

我有一个名为profList的“prof”对象列表,然后一个字典(称为collabDict)如下所示:

{17 : ['john', 'jim', 'fred'], 18 : ['tim', 'will', 'alex']} 

我想通过collabDict并将某些名称从字符串更改为profList中的上述“Prof”对象,但仅限于满足条件。以下代码是我的尝试,但它不会按预期更改值

for a in profList :
    for key in collabDict :
        for b in collabDict.get(key,None) :
            if (some condition) :
                b = a

任何见解都会非常有用,谢谢!

2 个答案:

答案 0 :(得分:1)

有你的字典:

>>> dct = {17 : ['john', 'jim', 'fred'], 18 : ['tim', 'will', 'alex']}

我们定义函数,测试,如果给定的名称是“prof”的类别:

>>> isProf = lambda name: "i" in name

并使用dict理解(从Python 2.7开始提供)我们更改名称,如果它们是可读的 成为“教授”:

>>> {key: ["Prof" + name if isProf(name) else name for name in names] for key, names in dct.items()}
{17: ['john', 'Profjim', 'fred'], 18: ['Proftim', 'Profwill', 'alex']}

此解决方案的缺点是,它为每次运行重建完整的字典。你应该知道,如果 这是可以接受的。

其他解决方案只能更改以这种方式更改的名称:

isProf = lambda name: "i" in name
dct = {17 : ['john', 'jim', 'fred'], 18 : ['tim', 'will', 'alex']}
for num in dct:
    for i, name in enumerate(dct[num]):
        if isProf(name):
            dct[num][i] += "Prof"
print dct

答案 1 :(得分:1)

您需要使用dict设置新值:

`collabDict[key] = a`

您只是设置b = a,而不是设置collabDict

中的值

如果您想要更改列表中的值:

collabDict={17 : ['john', 'jim', 'fred'], 18 : ['tim', 'will', 'alex']}
ind = collabDict[17].index("john")
collabDict[17][ind]="b"

在你的代码中:

for a in profList :
    for key in collabDict :
        for ind,b in enumerate(collabDict[key]) :
            if (some condition) :
                collabDict[key][ind] = a # change element at index to a