最简洁的方式来定义多个变量
我有大约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_ $ =价值)?
使用由货币索引的defaultdict
。
from collections import defaultdict
earnings = defaultdict(float) # float has a default value of 0.
而不是你的长IF-THEN-ELSE,使用此单行:
earnings[currency] = value
和检索,比如,美国$的收益,与
earnings["USD"]
谢谢。你能告诉我一个例子,我将如何使用'defaultdict'作为单个值 - 例如,如果currency ='AUD',我需要定义的变量是'earnings_in_aud',并且值将是10.00。 – David542 2012-01-16 19:02:49
@ David542:不要定义该变量。只要说'收入[货币] = 10.00',然后使用'print(收益[货币])'查询它。 – 2012-01-16 19:04:16
@ 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
如果可以在此用例中执行此操作,这可能是首选解决方案。 – 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必须是一个字符串常量列表,其顺序与左侧变量完全相同。就像我说的,如果你篡改程序的其他部分,这可能会非常好...
你的意思是你*设置这些特定的变量?因为它们是系统下一步的接口,而不仅仅是内部接口,并且您将使用函数调用或其他方式与其他部分交互? – 2012-01-16 19:10:58
(后期编辑)我的意思是说,它们是系统下一步的接口,而不是使用函数调用或其他方法与其他部分交互。那(前者)是这种情况吗? – 2012-01-16 19:17:59
@Emil我不确定我是否理解你的问题,但是不会在稍后的函数中使用这些值。他们只需要插入到数据库中。 – David542 2012-01-16 19:29:54