在Python中更改字典中键的值

时间:2017-03-24 01:35:48

标签: python dictionary

我有一个名为'li'的列表:

dict1={1:'1 okt 2002'}
dict2={1:'2 may 2003'}
li=[dict1,dict2]

我想将日期更改为python date_time格式,Python理解'Oct'不是'Okt'。所以我决定先用'Oct'代替'Okt'。我试过了

In[1]: A=[]
        for item in li:
           a=item[1].split()
           replace(a,'okt', 'oct')
           A.append(a)
        A
out[1]: [['1', 'oct', '2002'], ['2', 'may', '2003']]

但这并不是我想要的。有没有办法转 ['1','oct','2002']到'2002年10月1日'?

或者在字典值中将'Okt'更改为'Oct'是否更好? 谢谢。

替换功能:

def replace(l, X, Y):
    for i,v in enumerate(l):
        if v == X:
            l.pop(i)
            l.insert(i, Y)

2 个答案:

答案 0 :(得分:1)

' '.join(['October', '20', '2000'])

是你想要的。 string.join(list)连接由字符串分隔的数组的每个元素。在这种情况下,您可以用空格分隔数组。

至于用oct替换okt的更好方法,你可以使用它作为循环的第一行并摆脱替换函数:

a=item[1].replace('okt', 'oct').split()

EDIT(array-> list):谢谢@ juanpa.arrivillaga

答案 1 :(得分:1)

很难知道为什么你的代码无效,因为我们不知道你的replace函数做了什么,但显然它会返回一个列表。不过,这是实现目标的快捷方式:

>>> dict1={1:'1 okt 2002'}
>>> dict2={1:'2 may 2003'}
>>> li=[dict1,dict2]
>>> [{k:v.replace('okt','oct') for k,v in d.items()} for d in li]
[{1: '1 oct 2002'}, {1: '2 may 2003'}]
>>>

您可以定义一个辅助函数来获取datetime对象:

>>> def to_date(dstring):
...     return datetime.datetime.strptime(dstring, '%d %b %Y')
...
>>> [{k:to_date(v.replace('okt','oct')) for k,v in d.items()} for d in li]
[{1: datetime.datetime(2002, 10, 1, 0, 0)}, {1: datetime.datetime(2003, 5, 2, 0, 0)}]
>>>

理解构造的等效neste-forloop将是:

>>> li2 = []
>>> for d in li:
...     temp = {}
...     for k,v in d.items():
...         temp[k] = to_date(v.replace('okt','oct'))
...     li2.append(temp)
...
>>> li2
[{1: datetime.datetime(2002, 10, 1, 0, 0)}, {1: datetime.datetime(2003, 5, 2, 0, 0)}]
>>>