这是一个分析数据的类:
class TopFive:
def __init__(self, catalog_data, sales_data, query, **kwargs):
self.catalog_data = catalog_data
self.sales_data = sales_data
self.query = query
def analyse(self):
CATALOG_DATA = self.catalog_data
SALES_DATA = self.sales_data
query = self.query
products = {}
# Creating a dict with ID, city or hour ( depending on query ) as keys and their income as values.
for row in SALES_DATA:
QUERIES = {
'category': row[0],
'city': row[2],
'hour': row[3]
}
if QUERIES[query] in products:
products[QUERIES[query]] += float(row[4])
products[QUERIES[query]] = round(products[QUERIES[query]], 2)
else:
products[QUERIES[query]] = float(row[4])
if query == 'category':
top_five = {}
top_five_items = sorted(products, key=products.get, reverse=True)[:5] # Getting top 5 categories.
for key in top_five_items:
for row in CATALOG_DATA:
if key == row[0]:
key_string = row[5] + ', ' + row[4]
top_five[key_string] = products[key]
return top_five
else:
return products
它被称为:
holder = TopFive(catalog_data=catalog_data, sales_data=sales_data, query='hour')
top_hour = holder.analyse()
我现在要做的是处理日期。它们来自输入csv文件,如下所示:
2015-12-11T17:14:05+01:00
现在我需要更改为UTC时区。我想过使用:
.astimezone(pytz.utc)
现在我的问题:我可以在我的QUERIES字典中以某种方式这样做,这样当'hour'参数传递给类时,我就可以执行该程序,而无需更改以下代码的结构:
if QUERIES[query] in products:
products[QUERIES[query]] += float(row[4])
products[QUERIES[query]] = round(products[QUERIES[query]], 2)
else:
products[QUERIES[query]] = float(row[4])
并且不添加更多条件。 我想的是:
'hour': row[3].astimezone(pytz.utc)
但这不起作用。我能理解为什么,我只是想知道是否有类似的方法可行。否则我将不得不添加另一个具有单独返回值的条件并在那里工作。
答案 0 :(得分:1)
知道了!我的问题的答案是肯定的:你可以在字典中使用方法,就像我尝试的那样:
<div class="sample">
<?php
$nombre_us = $_COOKIE['nombre_cookie'];
if (!$members_name) {
echo '<a class="smp_btn" href="sample_login.php?pageURL=' . $url . '">Login</a>';
}
else {
echo '<span class="smp_text">' . $members_name . '</span>';
?>
<a class="smp_text" href="<?php echo $url; ?>" onclick="delete_cookie('nombre_cookie')">Logout</a>
<?php
}
?>
</div>
<script>
function delete_cookie(name) {
document.cookie = name +'=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}
</script>
</div>
我刚刚意识到我忘记将csv输入解析为datetime格式。所以很明显当我尝试在字符串上使用.astimezone时会引发错误。对于长期无用的帖子感到抱歉,但我对OOP仍然很新,并且很难跟踪所有文件,实例等等; D谢谢