【问题标题】:Extract specific column and group them from dictionary in Python提取特定列并将它们从 Python 中的字典中分组
【发布时间】:2014-11-05 12:12:29
【问题描述】:

我想从使用MySQLdb 获得的记录中提取特定列并将它们分组。我写了以下代码:

import _mysql
cdb=_mysql.connect(host="myhost",user="root",
                  passwd="******",db="my_db")
qry = "select col1,col2,col3,col4,col5,col6 from mytable"

cdb.query(qry)

resultset = cdb.store_result()

records = resultset.fetch_row(0,1) # 0 - no limit, 1 - output is in dictionary form

我只想从记录中提取 3 列:col1、col3 和 col4,并希望使用这三列创建一组唯一值,即 (col1,col3,col4) 的所有唯一组合。我知道我必须使用 set() 数据类型来查找唯一值,我尝试使用它,但我没有找到任何成功。让我知道什么是好的解决方案。

我在数据库中有数千条记录。我通过以下方式获取记录的输出:

({
    'col1':'data11',
    'col2':'data11',
    'col3':'data13',
    'col4':'data14',
    'col5':'data15',
    'col6':'data16'
},
{
    'col1':'data21',
    'col2':'data21',
    'col3':'data23',
    'col4':'data24',
    'col5':'data25',
    'col6':'data26'
})

【问题讨论】:

    标签: python mysql python-2.7 mysql-python


    【解决方案1】:

    我想出了这个解决方案:

    def filter_unique(records, columns):
        unique = set(tuple(rec[col] for col in columns) for rec in records)
        return [dict(zip(columns, items)) for items in unique]
    

    它首先为每条记录生成一个列值元组,然后使用 set() 删除非唯一的匹配项,然后通过为元组中的每个值指定名称来重构字典。

    这样称呼它:

    filtered_records = filter_unique(records, ['col1','col2','col3'])
    

    免责声明:我自己是 python 初学者,所以我的解决方案可能不是最好的或最优化的。

    【讨论】:

    • 非常好的解决方案 :) 大量元素的工作速度非常慢,但我设法根据我的要求稍微扭曲了它。很好:)
    猜你喜欢
    • 2022-11-03
    • 1970-01-01
    • 2018-07-30
    • 2013-10-01
    • 2018-08-30
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多