【问题标题】:two dictionaries to make a new one, difficult referencing两本词典新出一本,参考困难
【发布时间】:2013-07-19 00:42:40
【问题描述】:

这是我的代码到目前为止的样子:

给定字典 d1 和 d2,创建一个具有以下属性的新字典:对于 d1 中的每个条目 (a, b),如果 d2 中有条目 (b, c),则条目 (a, c ) 应添加到新字典中。 例如,如果 d1 是 {2:3, 8:19, 6:4, 5:12} 并且 d2 是 {2:5, 4:3, 3:9},那么新字典应该是 {2:9 , 6:3} 将新字典与变量 d3 相关联

d3 ={} 
for i in d1:
    for i in d2:
        if d1.get(i,default=none) in d2:
            d3[d1] = d2.get(i,default = None)

【问题讨论】:

  • 一些提示:你确定需要循环遍历d2吗?如果您已经检查过d1 中的值是否在d2 中,为什么还需要将get 与备用值一起使用?您有两个具有相同循环变量的循环。
  • 一些事情:1)你不能在for循环中使用相同的变量名。第一个 for 循环中的“i”在内部代码中丢失了。 2) 内部 for 循环是不必要的,因为您正在检查 d1 中的值是否是 d2 中的键。 3) d3[d1] 不是你想要的。 4) get() 已经将 None 作为默认值。

标签: python loops dictionary reference


【解决方案1】:

Python 可以很好地表达这一点。太糟糕了,这是作业,您可能无法使用 dict 理解或您的“老师”给您的任何其他限制

>>> d1 = {2:3, 8:19, 6:4, 5:12}
>>> d2 = {2:5, 4:3, 3:9}
>>> d3 = {a:d2[b] for a, b in d1.items() if b in d2}
>>> d3
{2: 9, 6: 3}

对于 Python2.5 或 Python2.6,使用带有 dict() 的生成器表达式

d3 = dict((a, d2[b]) for a, b in d1.items() if b in d2)

对于 2.4,请参阅@KP 的回答

【讨论】:

  • @KP。我不相信家庭作业问题需要2.4+答案的所有额外混乱和低效率。如果有人教 Python
  • d1.items()d1.iteritems()?
  • @Johnsyweb,最佳选择取决于您使用的是 Python2 还是 Python3。 .items() 对两者都有效,如果 d 不是很大,也不会太糟糕
【解决方案2】:

或者,如果你喜欢单行:

d3 = dict([(k, d2[v]) for k, v in d1.items() if v in d2])

【讨论】:

    猜你喜欢
    • 2013-07-16
    • 2019-06-16
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 2021-11-12
    相关资源
    最近更新 更多