【问题标题】:Return dictionary from function [duplicate]从函数返回字典[重复]
【发布时间】:2019-03-23 11:36:03
【问题描述】:

我已经搜索 stackoverflow 几个小时了,但没有找到解决问题的方法。我有一个函数,我希望输出是字典,但我只能让它打印第一个键 + 值。 “yield”语句由于某种原因不起作用,所以我想知道是否有另一种方法可以做到这一点。

这是我的代码:

def myfunc(somedict):
    x = list(somedict.values())      
    for i in x:
        data = dict_from_otherfunc(i)
        mylist = [float(max(data.values()))]
        mydict = dict(zip([i], mylist))
        return mydict

这会返回一个如下所示的字典:

{'abc': 1}

当我输入 print 而不是 return 时,我得到了所需的输出。我怎样才能让这段代码返回一个包含所有值而不是只有一个值的字典?

编辑: 尝试在 for 循环之外返回,这仅返回我的字典的 last 值。

【问题讨论】:

  • 您在 return 循环内 for ,因此函数在将第一个值存储在字典中后退出。
  • SO 不是您来学习如何使用“for”循环的地方。找到一个好的编程资源,学习和练习一些编码。

标签: python python-3.x dictionary return


【解决方案1】:

编辑:如果我理解正确,问题出在for 循环本身。您在每次迭代时设置 mydict 的值,所以它当然只返回其中一个。

现在,我不能完全确定我是否理解您想要做的事情,但如果我理解了,我建议您尝试以下方式:

def myfunc(somedict):
    x = list(somedict.values())
    mylist = [float(max(dict_from_otherfunc(i).values()) for i in x] # You can split this into two lines to make it more readable, I suppose
    mydict = dict(zip(x, mylist)
    return mydict

这也将受益于重命名你的变量等等,但我假设这只是一个例子。

【讨论】:

  • 我试过了,当我这样做时,我只得到字典的最后一项......
  • 啊,当然!我的错。等一下,我会在一分钟内解决的。
  • 检查新答案。它现在应该可以工作了——它所做的是将第一个字典的值与它在另一个函数中用作参数时返回的字典的最大值压缩在一起。
  • 非常感谢,成功了!
  • @LeszekKicior 你好心教他如何使用 for 循环。它会停在哪里?
猜你喜欢
  • 2018-05-15
  • 2019-11-22
  • 2011-05-01
  • 1970-01-01
  • 2015-06-05
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
相关资源
最近更新 更多