Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 剥离空白并将存储在字典中单个键中的多个值合并_Python_Dictionary_Whitespace - Fatal编程技术网

Python 剥离空白并将存储在字典中单个键中的多个值合并

Python 剥离空白并将存储在字典中单个键中的多个值合并,python,dictionary,whitespace,Python,Dictionary,Whitespace,我一直在自学python,到目前为止还不算太糟糕。我认为最简单的学习方法就是开始编码,所以我想出了相对简单的任务来帮助我。现在我被困住了,不能找出我做错了什么让我感到沮丧 {0: [[1, '.', 0, '-', 8]], 1: [['.', 3, '.', 2, 0, 0, 1, '-']], 2: [], 3: [['.', '.']], 4: [], 5: [[2, 0, 1, 2, '-', 0, 1, '-', 1, 9]], 6: [[1, '.', 0, 0, 9,

我一直在自学python,到目前为止还不算太糟糕。我认为最简单的学习方法就是开始编码,所以我想出了相对简单的任务来帮助我。现在我被困住了,不能找出我做错了什么让我感到沮丧

{0: [[1, '.', 0, '-', 8]], 
1: [['.', 3, '.', 2, 0, 0, 1, '-']], 
2: [], 
3: [['.', '.']], 
4: [], 
5: [[2, 0, 1, 2, '-', 0, 1, '-', 1, 9]], 
6: [[1, '.', 0, 0, 9, 5]], etc...
所以我有一个字典,每个键都有一个值(不同货币对的汇率)。我一直在尝试将值转换为单个字符串,例如:

0: [[1, '.', 0, '-', 8]] would become 0: '1.0-8'
6: [[1, '.', 0, 0, 9, 5]] would be 6 : '1.0095'
etc...
经过无数个小时的尝试和谷歌搜索,我得出结论,我完全不知道如何实现这一点。我尝试过做一个替换,以及各种复杂的循环,将字典变成一个列表列表,其中键[value]是一个列表,然后尝试使用连接函数等对其进行迭代……但这一切都毫无效果

看起来应该很简单,但我放弃了,我不知道怎么做,所以希望这里有人能帮我一把

非常感谢

一行

>>> {i:(''.join(str(x) for x in j[0]) if j else '') for i,j in d.items()}
{0: '1.0-8', 1: '.3.2001-', 2: '', 3: '..', 4: '', 5: '2012-01-19', 6: '1.0095'}
“以一种对noob友好的方式编写”,如被问及:

d_new = {}
for i,j in d.items():
    if j:
        d_new[i] = ''.join(str(x) for x in j[0])
    else:
        d_new[i] = ''

另一种方法。在这里,chain负责打开列表和处理空列表

>>> {k:"".join(map(str,chain(*v))) for k,v in spam.items()}
{0: '1.0-8', 1: '.3.2001-', 2: '', 3: '..', 4: '', 5: '2012-01-19', 6: '1.0095'}
很少有直观的方法

要使用展开类似于
[[1',0',-',8]]
的列表,请使用

要使用将
int
列表转换为
str
,请使用(请注意,它也可以用于iterables)

要创建字符串列表,请使用。(请注意,它也可以用于iterables)


你想要
2
4
做什么?@Denis那真是太漂亮了:)@Michael不。。。OP可能正在使用Py3Hey谢谢,这很好用,尽管我不太明白!我使用Python3是出于好奇。如果不麻烦的话,您介意在noob友好的环境中为i,j in Results.items()编写它吗:这样我就可以试着弄清楚它到底是如何工作的?谢谢哇!您可以使用字典列表理解!?!这是py3特有的吗?字典和集合理解是
2.7+
3.0+
我认为OP想要创建一个新的字典,而不是打印一个字典的格式。这是一个概念,它很容易被任何东西修改,我不认为stackoverflow是家庭作业解决方案的世界中心)足够公平,但这不是真正的家庭作业,OP是自己教的。还有我的方法,尽管我使用了
chain。from_iterable(v)
而不是
chain(*v)
@jamylak:而且也没有使用列表理解是的,有人告诉我,它们比
map
@jamylak更具可读性。看看这篇文章的第二个答案,我以前读过类似的文章,但我想这也是个人偏好的问题,我只是觉得没有这么多嵌套的括号看起来更好。
>>> from itertools import chain
>>> d = {0: [[1, '.', 0, '-', 8]], 1: [['.', 3, '.', 2, 0, 0, 1, '-']], 2: [], 
3: [['.', '.']], 4: [], 5: [[2, 0, 1, 2, '-', 0, 1, '-', 1, 9]], 6: [[1, '.', 0, 0, 9, 5]]}
>>> {k:''.join(str(el) for el in chain.from_iterable(v)) for k,v in d.items()}
{0: '1.0-8', 1: '.3.2001-', 2: '', 3: '..', 4: '', 5: '2012-01-19', 6: '1.0095'}
>>> {k:"".join(map(str,chain(*v))) for k,v in spam.items()}
{0: '1.0-8', 1: '.3.2001-', 2: '', 3: '..', 4: '', 5: '2012-01-19', 6: '1.0095'}
>>> list(chain(*[[1, '.', 0, '-', 8]]))
[1, '.', 0, '-', 8]
>>> map(str,[1, '.', 0, '-', 8])
['1', '.', '0', '-', '8']
"".join(['1', '.', '0', '-', '8'])