最简洁的方式来定义多个变量

问题描述:

我有大约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

使用由货币索引的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

如果收益是一个对象/数组然后

earnings[currency] = value 

earnings.currency = value; 

也许用字典?

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

如果可以在此用例中执行此操作,这可能是首选解决方案。 – 2012-01-16 19:06:04

一种方式做到这一点,这很可能有当它打破别人混淆,是使用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