在Python 3.6中,我发现我无法对包含在列表中的两个字符串使用.join()方法,列表中包含字典键,在循环字典时。为了澄清,这是一个代表问题的示例字典。
d = {0: [['abc', 'def'], 5, 'gjf'], 1: ['abc', 17, ['abc', 'def']], 2: [0, 1, 2]}
如您所见,所有三个键都将列表作为值(如在我的真实词典中)。第一个和第二个键还包含另一个列表,其中包含两个字符串。出于某种原因,我不能在它们上使用.join()。
这是我的第一次尝试:
for key in d:
for val in d[key]:
if type(val) == list:
val = ','.join(val)
没有提供错误消息。当我运行上面的代码并打印d时,字典完全相同。
此外,我还尝试将列表分配给另一个变量并将列表加入其中并重新分配,但也失败了。 但是,请记住,这一切都是在循环中尝试的(为了我的目的,我相对肯定它必须是。字典相当大,列表不是一定的在字典里面的位置)。
没有提供错误消息。当我运行上面的代码并打印d时,字典完全相同。
另一个有趣的事情是我跑步时会发生什么:
for key in d:
for val in d[key]:
print(val)
我得到的输出是: [' abc',' def'] 五 GJF ABC 17 [' abc',' def'] 0 1 2
而不是三个列表的分组,这是我所期望的。但是,当我运行以下内容时,我会得到三个列表的分组:
for key in d:
if type(d[key]) == list:
print(d[key])
[['abc', 'def'], 5, 'gjf']
['abc', 17, ['abc', 'def']]
[0, 1, 2]
我做错了吗? 这是内置的,我只是不知道解决这个问题的方法吗? 有办法解决这个问题吗?
感谢您的帮助,如果这是太多(不必要的)信息,我会道歉。
解决方案:
for key in dd:
i = 0
for val in dd[key]:
if type(val) == list:
dd[key][i] = ','.join(val)
i += 1
上面做了我想要的,回归:
{0: ['abc,def', 5, 'gjf'], 1: ['abc', 17, 'abc,def'], 2: [0, 1, 2]}
感谢您的帮助。