0

我一直在自学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...

经过数小时尝试各种方法和谷歌搜索后,我得出的结论是,我对如何实现这一点一无所知。我试过做一个替换,以及各种复杂的循环,将字典变成一个列表,其中键 [值] 作为一个列表,然后尝试使用连接函数等对其进行迭代......这一切都完成了绝对没有!

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

非常感谢!

4

4 回答 4

1

单线...

>>> {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'}

“以菜鸟友好的方式编写它”,如被问到:

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] = ''
于 2012-04-18T06:46:17.660 回答
0
d = {0: [[1, '.', 0, '-', 8]], 6: [[1, '.', 0, 0, 9, 5]]}
for k,v in d.iteritems():
    print str(k)+':'+''.join(str(el) for el in v[0])
于 2012-04-18T06:56:25.003 回答
0
>>> 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'}
于 2012-04-18T07:21:01.327 回答
0

另一种方法。这里链负责展开列表和处理空列表。

>>> {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]]要像使用itertools.chain一样解开列表,请使用

>>> list(chain(*[[1, '.', 0, '-', 8]]))
[1, '.', 0, '-', 8]

intstr使用map转换列表,请使用(请注意,它也可以与 iterables 一起使用)

>>> map(str,[1, '.', 0, '-', 8])
['1', '.', '0', '-', '8']

加入字符串列表,请使用。(请注意,它也可以与可迭代对象一起使用)

"".join(['1', '.', '0', '-', '8'])

字典理解

于 2012-04-18T07:25:51.060 回答