[英]Setting dictionary value in python does not update the value?
我試圖從兩個字符串中替換掉缺失的日期值,但是將它們分成“ 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中的工作方式,我缺少什么嗎? 我很新。 我也嘗試了字典更新命令的不同形式。
將Python 3.6與Anaconda結合使用。
您更改函數的返回值。 由於您不將其存儲在任何地方,因此丟失了。 而是做類似的事情
custom_date = date_split(x)
custom_date['y'] = new
date = recompile(custom_date)
每次調用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)
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)
您不能在函數調用中保存更改,而必須將其存儲在變量中。
正如其他人所說,您需要保存date_split
返回的字典,以便對其進行修改。 但是,您的date_split
函數比需要的要大得多,因此我使用zip
編寫了一個更緊湊的版本。
您的recompile
函數將無法始終在早期版本的python上正常運行,因為dict是無序集合,但是在Python 3.6+上是可以的,因為dict現在保留了插入順序。 另外,也不需要在new = str(date_split(std)['y'])
調用str
。 date_split
返回的dict中的所有值已經是字符串。
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)
產量
Original {'y': 'XXXX', 'm': '01'}
Updated {'y': '2018', 'm': '01'}
String 2018-01
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.