Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在字典中创建嵌套列表,列表中不包含重复项_Python_List_Dictionary - Fatal编程技术网

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,则项目()
()