无法在字典(Python)中使用.join()和for循环

时间:2017-07-21 16:13:48

标签: python string list dictionary

在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]}

感谢您的帮助。

0 个答案:

没有答案