我试图简单地从两个字符串中替换缺失的日期值,但是将它们分成“ year”,“ month”等字典。但是,我遇到了一个很奇怪的问题,我在之后找不到答案谷歌搜索20分钟。
这是我的代码:
def date_split(date):
parts = date.split('-')
if len(parts) == 1:
year = parts[0]
dates = {'y' : year}
if len(parts) == 2:
year = parts[0]
month = parts[1]
dates = {'y' : year, 'm' : month}
if len(parts) == 3:
year = parts[0]
month = parts[1]
day = parts[2]
dates = {'y' : year, 'm' : month, 'd' : day}
return dates
def recompile(date):
lista = list(date.values())
date = "-".join(lista)
return date
std = "2018-07-18"
x = "XXXX-01"
if date_split(x)['y'] == 'XXXX':
new = str(date_split(std)['y'])
date_split(x)['y'] = new
date = recompile(date_split(x))
print(date)
我刚刚开始使用它,所以它很粗糙,但是我正在研究它。但是,虽然date_split(std)['y']
打印为2018
,但在date_split(x)['y'] = new
之后,date_split(x)['y']
的值仍打印为"XXXX"
。因此,字典不会更新该值。关于字典在python中的工作方式,我缺少什么吗?我很新。我也尝试了不同形式的字典更新命令。
在Anaconda中使用Python 3.6。
答案 0 :(得分:1)
您可以更改函数的返回值。由于您不将其存储在任何地方,因此丢失了。相反,要做类似的事情
custom_date = date_split(x)
custom_date['y'] = new
date = recompile(custom_date)
答案 1 :(得分:1)
每次调用date_split(x)
时,它都会返回一个新的字典,因此对其进行更新不会对下一个调用产生影响。相反,您应该将date_split(x)
的返回值分配给变量,然后使用该变量进行进一步处理。
std = "2018-07-18"
x = "XXXX-01"
s = date_split(x)
if s['y'] == 'XXXX':
new = str(date_split(std)['y'])
s['y'] = new
date = recompile(s)
print(date)
答案 2 :(得分:1)
def date_split(date):
parts = date.split('-')
if len(parts) == 1:
year = parts[0]
dates = {'y' : year}
if len(parts) == 2:
year = parts[0]
month = parts[1]
dates = {'y' : year, 'm' : month}
if len(parts) == 3:
year = parts[0]
month = parts[1]
day = parts[2]
dates = {'y' : year, 'm' : month, 'd' : day}
return dates
def recompile(date):
lista = list(date.values())
date = "-".join(lista)
return date
std = "2018-07-18"
x = "XXXX-01"
if date_split(x)['y'] == 'XXXX':
old = date_split(x)
new = str(date_split(std)['y'])
print(old)
print(new)
old['y'] = new
date = recompile(old)
print(date)
您不能保存对函数调用的更改,必须将其存储在变量中。
答案 3 :(得分:1)
正如其他人所说,您需要保存<link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.min.css" rel="stylesheet"/>
<ul>
<li>
<span class="fa fa-ellipsis-v"></span>
<span class="fa fa-eye"></span>
<span class="title">Item 1</span>
<span class="fa fa-sort-down"></span>
<span class="fa fa-times"></span>
</li>
<li>
<span class="fa fa-ellipsis-v"></span>
<span class="fa fa-eye"></span>
<span class="title">Item with long title</span>
<span class="fa fa-sort-down"></span>
<span class="fa fa-times"></span>
</li>
</ul>
返回的字典,以便可以对其进行修改。但是,您的date_split
函数比需要的要大得多,因此我使用zip
编写了一个更紧凑的版本。
您的date_split
函数在早期版本的python上总是无法正常工作,因为dict是无序集合,但是在Python 3.6+上也可以,因为dict现在保留了插入顺序。另外,也无需在recompile
中调用str
。 new = str(date_split(std)['y'])
返回的字典中的所有值已经是字符串。
date_split
输出
def date_split(date):
return dict(zip("ymd", date.split("-")))
def recompile(date):
return "-".join(date.values())
std = "2018-07-18"
x = "XXXX-01"
x_split = date_split(x)
print("Original", x_split)
if x_split["y"] == "XXXX":
x_split["y"] = date_split(std)["y"]
print("Updated ", x_split)
date = recompile(x_split)
print("String ", date)