我有一個字符串列表:轉換列表字典列表引用
listofdictrefs = ["ws['D4']", "ws['H72']", "ws['B4']"]
這些字符串實際上是字典引用。我想該列表轉換爲變量引用,所以我可以寫這些變量到CSV行:
眼下,當然,它寫入列表作爲字符串。我知道python引用與該名稱匹配的變量(在這種情況下是字典條目)。
我有一個字符串列表:轉換列表字典列表引用
listofdictrefs = ["ws['D4']", "ws['H72']", "ws['B4']"]
這些字符串實際上是字典引用。我想該列表轉換爲變量引用,所以我可以寫這些變量到CSV行:
眼下,當然,它寫入列表作爲字符串。我知道python引用與該名稱匹配的變量(在這種情況下是字典條目)。
如果ws
是字典變量的實際名稱則可以使用eval
的IT寫出來,雖然這是容易出錯。即使在你不處理不可信輸入的情況下(所以,讓我們假設安全問題不在話下)當你可以靜態地檢查語法分析時,你會將語義分析和大量語義分析推送到運行時。儘管如此:
csvwriter.writerow(eval(r) for r in listofdictrefs)
但是,如果可能的話,你會更好保持鍵列表和索引ws
字典
keys = ['D4', 'H72', 'B4']
csvwriter.writerow(ws[k] for k in keys)
eval
很少是正確的解決方案。
我不知道eval()函數。人們總是可以每天學習新東西。謝謝:D –
@ Meowtwo117非常謹慎地處理,如果您在任何不信任內容(任何來自文件或用戶或其他輸入源的內容)的任何**上調用'eval',它都不安全。 –
在這種情況下,您可以使用eval
。不過,一定要小心運行未經檢查的代碼eval
!
listofdictrefs = ["ws['D4']", "ws['H72']", "ws['B4']"]
ws = {'D4' : 100,'H72' : 50,'B4' : 25}
for ref in listofdictrefs:
print eval(ref)
100
50
25
如果你不關心安全問題,你可以使用'csvwriter.writerow(eval(x)for x in listofdictrefs)'但是[小心](http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html )。此外,我會使用'eval(x,None,ws)'來獲得至少一些保護。 – Jkdc