2012-01-16 69 views
2

我有大約10,000條目組成的數據。每一行都是特定貨幣產品的價格。例如:最簡潔的方式來定義多個變量

- Purchase 1 = 10.25 USD 
- Purchase 2 = 11.76 SEK 

我有十個不同的數據庫列,總銷售額爲每種貨幣(這是一個要求)。這些列是earnings_in_usd,earnings_in_sek,earnings_in_eur等。在我的函數中對數據庫做一個插入語句,我需要定義必要的變量。默認情況下,所有其他條目將爲0.00。這基本上是會完成我需要做的代碼:

if currency == 'USD': 
    earnings_in_usd = value 
elif currency == 'SEK': 
    earnings_in_sek = value 
elif ... 

有沒有更簡單的方式做到這一點(的方式做類似earnings_in_ $ =價值)?

+0

你的意思是你被迫設置這些特定的變量?因爲它們是系統下一步的接口,而不僅僅是內部接口,並且您將使用函數調用或其他方式與其他部分交互? – 2012-01-16 19:10:58

+0

(後期編輯)我的意思是說,它們是系統下一步的接口,而不是使用函數調用或其他方法與其他部分交互。那(前者)是這種情況嗎? – 2012-01-16 19:17:59

+0

@Emil我不確定我是否理解你的問題,但是不會在稍後的函數中使用這些值。他們只需要插入到數據庫中。 – David542 2012-01-16 19:29:54

回答

6

使用由貨幣索引的defaultdict

from collections import defaultdict 

earnings = defaultdict(float) # float has a default value of 0. 

而不是你的長IF-THEN-ELSE,使用此單行:

earnings[currency] = value 

和檢索,比如,美國$的收益,與

earnings["USD"] 
+0

謝謝。你能告訴我一個例子,我將如何使用'defaultdict'作爲單個值 - 例如,如果currency ='AUD',我需要定義的變量是'earnings_in_aud',並且值將是10.00。 – David542 2012-01-16 19:02:49

+2

@ David542:不要定義該變量。只要說'收入[貨幣] = 10.00',然後使用'print(收益[貨幣])'查詢它。 – 2012-01-16 19:04:16

+2

@ David542:您也可以在字符串格式中使用字典:'「INSERT INTO ...(%(USD)s,%(SEK)s,%(AUD)s)」%earnings'(或'「... {美元} ..」。格式(**收益)') – 2012-01-16 19:08:48

-1

如果收益是一個對象/數組然後

earnings[currency] = value 

earnings.currency = value; 
0

也許用字典?

earnings = {} 
earnings[currency] = value 
+0

如果可以在此用例中執行此操作,這可能是首選解決方案。 – 2012-01-16 19:06:04

0

一種方式做到這一點,這很可能有當它打破別人混淆,是使用list comprehension

earnings_in_usd, earnings_in_sek, ... = [(value if currency == c else 0) for c in CURRENCIES] 

的缺點是左側必須包括所有你的變量和CURRENCIES必須是一個字符串常量列表,其順序與左側變量完全相同。就像我說的,如果你篡改程序的其他部分,這可能會非常好...

+3

我相信Python會以這種語法來看待問題。 – kindall 2012-01-16 20:10:45

+0

哦,對。在Python中,三元運算符不存在,但可以使用'和'和'or'來模擬。答案已更新。 – 2012-01-16 22:49:39

+1

在Python中,「三元運算符」是value1,如果條件else value2' – kindall 2012-01-16 23:40:58

相關問題