我有一个名为'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)
答案 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)}]
>>>