是否可以将字典值视为对象?

时间:2016-02-02 15:25:35

标签: python dictionary timezone

这是一个分析数据的类:

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)

但这不起作用。我能理解为什么,我只是想知道是否有类似的方法可行。否则我将不得不添加另一个具有单独返回值的条件并在那里工作。

1 个答案:

答案 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谢谢