Python 在字典中创建嵌套列表,列表中不包含重复项
我正在做一个数据库查询,例如Python 在字典中创建嵌套列表,列表中不包含重复项,python,list,dictionary,Python,List,Dictionary,我正在做一个数据库查询,例如从仓库中选择水果。 目标是创建一个包含每个仓库中水果的字典: {13: [apple, orange, grapes], 14: [banana, pineapple], 20: [strawberry, avocado, blueberry]} 我想将几个仓库中存在的任何水果一起移除,并打印一条关于它们的错误消息。 我找到了一个可行的解决方案,但它需要几个步骤: fruits = set() duplicates = set() stock = {} tmp =
从仓库中选择水果
。
目标是创建一个包含每个仓库中水果的字典:
{13: [apple, orange, grapes], 14: [banana, pineapple], 20: [strawberry, avocado, blueberry]}
我想将几个仓库中存在的任何水果一起移除,并打印一条关于它们的错误消息。
我找到了一个可行的解决方案,但它需要几个步骤:
fruits = set()
duplicates = set()
stock = {}
tmp = []
for warehouse in warehouses:
for row in results:
if row[0] in fruits
print row[0] + " is a duplicate"
duplicates.add(row[0])
else
fruits.add(row[0])
tmp.append(row[0])
stock[warehouse] = tmp
tmp = []
final_result = {}
#Remove duplicates
for warehouse,fruits in stock.iteritems():
final_result[warehouse] = []
for fruit in fruits:
if fruit not in duplicates:
final_result[warehouse].append(fruit)
我喜欢在可能的情况下使用dict/list理解,但这里似乎排除了这一点,而且整个方法看起来有点麻烦,是否有更好/更清晰的方法来实现相同的结果?是的,有,事实上可以通过理解来实现:
stock = {}
for warehouse in warehouses:
stock[warehouse] = []
for row in results:
stock[warehouse].append(row[0])
fruit_list = [fruit for warehouse in stock.values() for fruit in warehouse]
duplicates = {fruit for fruit in set(fruit_list) if fruit_list.count(fruit) > 1}
for fruit in duplicates:
print(fruit + " is a duplicate")
final_result = {warehouse:[fruit for fruit in fruits if fruit not in duplicates] for warehouse,fruits in stock.items()}
什么是
仓库
,什么是结果
?请查看如何生成一个数据库并澄清输入和预期输出…每个“仓库”都是一个不同的数据库主机,我在其上执行查询,该查询的结果就是结果。谢谢,这看起来非常干净,然而,生成重复项的集合理解似乎效率很低,因为它比我原来使用的执行时间要长得多。(我有大约50000个水果)我同意你的原始代码在功能上相当有效,我唯一不明白的是为什么你使用tmp
变量而不是直接附加到stock[warehouse]
。我只是没想到:)所以你的观点肯定有助于清理我的代码!我找到了一种优化你的建议的方法:{水果换水果,柜台上的数字(水果列表)。如果数字>1,则项目()
()