在字典值中添加标点符号?

时间:2018-01-02 18:40:05

标签: python

我有一个字典作为输出,有一些数字:

example_dict = dict{'X': OrderedDict, 'Y': OrderedDict}

print(example_dict)

example_dict = {'X': OrderedDict(['Value1', '100000', 
                                  'Value2', '10000', 
                                  'Value3', '1000'])
                'Y': OrderedDict(['Value4', '2000', 
                                  'Value5', '20000', 
                                  'Value6', '200000'])}

我希望Python能够使用自动分配到正确位置的逗号打印此输出,以便新输出变为:

example_dict = {'X': OrderedDict(['Value1', '100,000', 
                                  'Value2', '10,000', 
                                  'Value3', '1000'])
                'Y': OrderedDict(['Value4', '2000', 
                                  'Value5', '20,000', 
                                  'Value6', '200,000'])}

这些值在整个字典中可以是随机的,而不是我上面描述的方式。在一些地方,有数十万人完全失踪,而有些人只有数千人。也就是说,我需要定义函数,使得字典中有5位数的任何值在第四位和第三位之间插入一个',',依此类推。

1 个答案:

答案 0 :(得分:1)

不确定你有OrderedDict种,但我已根据我的理解进行了尝试。

您可以添加带自定义功能的逗号,并根据需要替换innerdict值。

希望这会有所帮助。

示例代码

from collections import OrderedDict    

#Build your dict (sort of)
x = ['Value1', '100000', 'Value2', '10000', 'Value3', '1000']
y = ['Value4', '2000', 'Value5', '20000', 'Value6', '200000']

z = {'X': OrderedDict([x[i:i+2] for i in range(0, len(x),2)]),  
     'Y': OrderedDict([y[i:i+2] for i in range(0, len(y),2)]),
     }

#function to set commas, you can expand as needed
def getNum(a):
    if len(a)   == 5: return a[0:2] + ',' + a[2:]
    elif len(a) == 6: return a[0:3] + ',' + a[3:]
    else: return a


#Add commas to inner dict
for k,innerdict in z.iteritems():
    for k2,v2 in innerdict.iteritems():
        innerdict[k2] = getNum(v2)

<强>结果

#`z` before changes  
    >>> 
    {'Y': OrderedDict([('Value4', '2000'), ('Value5', '20000'), ('Value6',   '200000')]),  
    'X': OrderedDict([('Value1', '100000'), ('Value2', '10000'),   ('Value3', '1000')])}  

#`z` after changes  
    {'Y': OrderedDict([('Value4', '2000'), ('Value5', '20,000'), ('Value6', '200,000')]),
     'X': OrderedDict([('Value1', '100,000'),  
 ('Value2', '10,000'), ('Value3', '1000')])}  
    >>>