我有一个名为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
任何见解都会非常有用,谢谢!
答案 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