【问题标题】:How to get a dictionary of data in column1 as key and column2 as the value?如何将column1中的数据字典作为键,column2作为值?
【发布时间】:2014-12-19 07:13:52
【问题描述】:

This question in stack overflow 回答了如何使用 pymysql 从表中获取字典。但是,此方法将列标题作为键输出,将其值作为该列中的数据输出。

将实际数据作为键和值的最佳方式是什么?

例如:

 Name    |Age
 -------------
 John    |25
 Tom     |45
 Tammy   |18

我想要

  {John:25, Tom:45, Tammy:18}

不是

 [{Name:John},{Age:25},....]

这就是我现在拥有的:

def name2dict(name_list):
    name_list_tuple = tuple(name_list)
    conn = pymysql.connect()
    cur = conn.cursor(pymysql.cursors.DictCursor)
    Name2pos = """SELECT Tables.ID, Tables.Position FROM Tables where Tables.Name in %s"""
    cur.execute(Name2pos, [name_list_tuple])
    query_dict = cur.fetchall()
    cur.close()
    conn.close()
    return query_dict

【问题讨论】:

  • 如果您的查询是“SELECT name, age FROM some_table”(例如:它返回两列 - 所以不要使用 cursordict),那么只需使用 dict(your_cursor_that_executes_the_query) 您能显示您当前的代码吗?
  • 对不起,您当前的字典结构是什么?它是一个字典列表,其中每个字典都包含名称和年龄键吗?或者它是一个字典列表,都只有一个键,有时是“姓名”,有时是“年龄”?还是别的什么?
  • 哇不明白为什么这应该投反对票? @Joe,我刚刚添加了代码。而且,我认为您的建议应该有效。谢谢
  • @msakya 没有意识到我已经把我的名字改成了 Joe :) - 无论如何,稍微调整你的代码,只要你得到一个 2 元组序列,将它传递给 @ 987654327@ 应该如你所愿
  • 哦,我的坏乔恩。真对不起。乔恩听起来更好。

标签: python pymysql


【解决方案1】:

不要使用字典光标 - 而是使用普通光标。一个简单的例子,稍微调整了你的代码(假设它运行正常,因为无法检查),但肯定可以改进:

def name2dict(name_list):
    name_list_tuple = tuple(name_list)
    conn = pymysql.connect()
    cur = conn.cursor()
    Name2pos = """SELECT Tables.ID, Tables.Position FROM Tables where Tables.Name in %s"""
    cur.execute(Name2pos)
    query_dict = dict(cur.fetchall())
    cur.close()
    conn.close()
    return query_dict

【讨论】:

  • 是的,这就是我喝完咖啡后的结果。非常感谢。仍然对(-ve)票感到沮丧......哈哈
  • @msakya 而不是.fetchall(),您可能需要考虑尝试query_dict = dict(cur.execute(Name2pos, multi=True)) 以保存先将结果集加载到内存中......(虽然不确定pymysql api是否支持......不方便检查)...可能只使用query_dict = dict(cur)(假设cur是可迭代的而不是None
【解决方案2】:

我不清楚你当前数据的结构是什么,所以我想我会为每个单独写一个答案!

d = {
    "Name": ["John", "Tom", "Tammy"], 
    "Age": [25,45,18]
}
new_d = dict(zip(d["Name"], d["Age"]))
print new_d

rows = [
    {"Name": "John", "Age": 25},
    {"Name": "Tom", "Age": 45},
    {"Name": "Tammy", "Age": 18},
]
new_d = {row["Name"]: row["Age"] for row in rows}
print new_d

data = [
    {"Name": "John"}, 
    {"Age": 25},
    {"Name": "Tom"}, 
    {"Age": 45},
    {"Name": "Tammy"}, 
    {"Age": 18},
]
d = {
    "Name": [item["Name"] for item in data if "Name" in item],
    "Age": [item["Age"] for item in data if "Age" in item],
}
new_d = dict(zip(d["Name"], d["Age"]))
print new_d

无论如何,结果是:

{'John': 25, 'Tammy': 18, 'Tom': 45}

【讨论】:

  • 哇,谢谢,抱歉不清楚。但是乔恩斯的回答对我有用。
猜你喜欢
  • 2017-09-18
  • 1970-01-01
  • 2019-12-09
  • 2014-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-24
  • 1970-01-01
相关资源
最近更新 更多