从Python中的列表中检索dict值

从Python中的列表中检索dict值,python,dictionary,Python,Dictionary,我有一本字典,其中的值是不同长度的列表,如下所示: {"a":[1,2,3], "b":[4,3,5,6,7], "c":[1], "d":[2,5]} 我想将其转换为元组列表,以便上载到数据库: [("a",1), ("a",2), ("a",3), ("b",4), ("b",3) ... ] 我最近试过的一件事是: lst = [] mydict = {"a":[1,2,3], "b":[4,3,5,6,7], "c":[1], "d":[2,5]} for k in mydict.k

我有一本字典,其中的值是不同长度的列表,如下所示:

{"a":[1,2,3], "b":[4,3,5,6,7], "c":[1], "d":[2,5]}
我想将其转换为元组列表,以便上载到数据库:

[("a",1), ("a",2), ("a",3), ("b",4), ("b",3) ... ]
我最近试过的一件事是:

lst = []
mydict = {"a":[1,2,3], "b":[4,3,5,6,7], "c":[1], "d":[2,5]}
for k in mydict.keys():
    for i in range(len(mydict[k])):
        count = 0
        while count < i:
            lst.append((k, mydict[k]))
            count += 1
lst=[]
mydict={“a”:[1,2,3],“b”:[4,3,5,6,7],“c”:[1],“d”:[2,5]}
对于mydict.keys()中的k:
对于范围内的i(len(mydict[k]):
计数=0
当计数

这不起作用,但我不知道为什么。谢谢你的帮助

感觉你把事情复杂化了一点

它应该只需要2个循环:

lst = []
for k, vals in mydict.items():
    for value in vals:
        lst.append((k, value))
第一个循环覆盖字典项,内部循环覆盖值列表。对于值列表中的每个值,只需将保存键和值的元组附加到结果列表中

还有,FWIW,这里还有很多其他拼写:

lst = []
for k, vals in mydict.items():
    lst.extend((k, value) for value in vals)
甚至是一个:

虽然我不是单线版本的超级粉丝


至于为什么你的版本不起作用,让我们看看并找出:

lst = []
mydict = {"a":[1,2,3], "b":[4,3,5,6,7], "c":[1], "d":[2,5]}
for k in mydict.keys():
    for i in range(len(mydict[k])):
        count = 0
        while count < i:
            lst.append((k, mydict[k]))
            count += 1

但是,与我上面提供的选项相比,这已经是一种更为冗长(而且更令人困惑)的方式了。

感觉你把它复杂化了一点

它应该只需要2个循环:

lst = []
for k, vals in mydict.items():
    for value in vals:
        lst.append((k, value))
第一个循环覆盖字典项,内部循环覆盖值列表。对于值列表中的每个值,只需将保存键和值的元组附加到结果列表中

还有,FWIW,这里还有很多其他拼写:

lst = []
for k, vals in mydict.items():
    lst.extend((k, value) for value in vals)
甚至是一个:

虽然我不是单线版本的超级粉丝


至于为什么你的版本不起作用,让我们看看并找出:

lst = []
mydict = {"a":[1,2,3], "b":[4,3,5,6,7], "c":[1], "d":[2,5]}
for k in mydict.keys():
    for i in range(len(mydict[k])):
        count = 0
        while count < i:
            lst.append((k, mydict[k]))
            count += 1

但是,与我上面提供的选项相比,这已经是一种更为冗长(而且更令人困惑)的编写方法。

您应该尽可能避免在python中使用for循环,因为它效率非常低。使用列表理解作为实现这一点的最佳方式。stack是dict的名称:

[(i,x) for x in stack[i] for i in stack.keys()]

您应该尽可能避免python中的for循环,因为它效率很低。使用列表理解作为实现这一点的最佳方式。stack是dict的名称:

[(i,x) for x in stack[i] for i in stack.keys()]
使用和压缩:

或:

也可以用来代替itertools.cycle。

使用和压缩:

或:


也可以用来代替itertools.cycle。

您不需要调用。键是的,您是正确的。只是想看看发生了什么。尤其是当我在字典中使用“stack”这样的随机名称时,我不同意“应该避免for循环…”的说法,因为它们效率低下。在最坏的情况下,它们只比同等的列表理解稍微慢一点。最主要的问题通常是在您的分析能够告诉您其他情况之前,表达式的可读性有多容易。这里列出的公司经常很受欢迎,因为熟悉它们的人可以把它们作为一个单一的原子单位来消化。你不需要打电话。是的,你是对的。只是想看看发生了什么。尤其是当我在字典中使用“stack”这样的随机名称时,我不同意“应该避免for循环…”的说法,因为它们效率低下。在最坏的情况下,它们只比同等的列表理解稍微慢一点。最主要的问题通常是在您的分析能够告诉您其他情况之前,表达式的可读性有多容易。列表comp经常在这里大放异彩,因为它们可以作为一个单一的原子单元被熟悉它们的人消化。这个解决方案与几分钟前发布的解决方案有何不同?呜呜,我想我被打败了。虽然这个代码片段可以解决这个问题,但它没有解释为什么或者如何回答这个问题。请,因为这确实有助于提高你的文章质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。标记者/审阅者:此解决方案与几分钟前发布的解决方案有何不同?呜呜,我想我被打败了。虽然此代码片段可能解决了问题,但它没有解释为什么或如何回答问题。请,因为这确实有助于提高你的文章质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。标记者/评审者:pmid来自哪里?pmid来自哪里?
for k, v in d.items():
    result.extend(itertools.izip(itertools.cycle(k), v))