当前位置: 首页 > 面试题库 >

Iter,值,字典中的项目不起作用

伯英武
2023-03-14
问题内容

有这个Python代码

edges = [(0, [3]), (1, [0]), (2, [1, 6]), (3, [2]), (4, [2]), (5, [4]), (6, [5, 8]), (7, [9]), (8, [7]), (9, [6])]
graph = {0: [3], 1: [0], 2: [1, 6], 3: [2], 4: [2], 5: [4], 6: [5, 8], 7: [9], 8: [7], 9: [6]}
cycles = {}
while graph:
    current = graph.iteritems().next()
    cycle = [current]
    cycles[current] = cycle
    while current in graph:
        next = graph[current][0]
        del graph[current][0]
        if len(graph[current]) == 0:
            del graph[current]
        current = next
        cycle.append(next)


def traverse(tree, root):
    out = []
    for r in tree[root]:
        if r != root and r in tree:
            out += traverse(tree, r)
        else:
            out.append(r)
    return out

print ('->'.join([str(i) for i in traverse(cycles, 0)]))



Traceback (most recent call last):
  File "C:\Users\E\Desktop\c.py", line 20, in <module>
    current = graph.iteritems().next()
AttributeError: 'dict' object has no attribute 'iteritems'

我也尝试了itervalues,iterkeys …,但是那不起作用如何修改代码


问题答案:

您正在使用Python 3;使用dict.items()代替。

Python 2dict.iter*方法已在Python
3中重命名,该方法dict.items()现在默认返回字典视图而不是列表。字典视图的可迭代性与dict.iteritems()Python
2中的可迭代性相同。

来自Python 3新增功能文档:

* dict方法dict.keys()dict.items()然后dict.values()返回“视图”而不是列表。例如,它不再起作用:k = d.keys(); k.sort()。使用k = sorted(d)代替(这也适用于Python 2.5,并且同样有效)。
* 此外,dict.iterkeys()dict.iteritems()dict.itervalues()不再支持的方法。

同样,该.next()方法已重命名为.__next__(),但是字典视图不是迭代器。该行graph.iteritems().next()必须改为翻译为:

current = next(iter(graph.items()))

它用于iter()将项目视图变成一个可迭代的对象,并next()从该可迭代对象中获取下一个值。

您还必须nextwhile循环中重命名变量。使用该功能替换next()您在此处需要的内置功能。使用next_代替。

下一个问题是您试图current用作中的键cycles,但是它current是一个整数的元组和一个整数 列表 ,从而使整个值不可散列。我
认为 您只想获取下一个 密钥 ,在这种情况下next(iter(dict)),您会得到:

while graph:
    current = next(iter(graph))
    cycle = [current]
    cycles[current] = cycle
    while current in graph:
        next_ = graph[current][0]
        del graph[current][0]
        if len(graph[current]) == 0:
            del graph[current]
        current = next_
        cycle.append(next_)

然后产生一些输出:

>>> cycles
{0: [0, 3, 2, 1, 0], 2: [2, 6, 5, 4, 2], 6: [6, 8, 7, 9, 6]}


 类似资料:
  • 问题内容: 您将如何基于列表的值来修改/创建嵌套dict的dict中的键/值,其中列表的最后一项是dict的值,而其余项会返回到dict中的键?这将是列表: 仅在诸如解析命令行参数之类的情况下,这才是问题。显然,在脚本中修改/创建此值将非常容易。 这将是字典的嵌套字典: 我猜在这种情况下,将需要诸如递归函数或列表理解之类的东西。 另外,如果中的项目会重新引用不存在的字典中的键,则应创建它们。 问题

  • next13 构建的react项目 setupProxy.js不起作用了? 在src下和根目录下都配置了setupProxy.js都是不起作用

  • 我正在尝试将我的值从字典映射到NavLink字段。出于某种原因,这种精确的方法与react按钮完美配合使用,但与NavLink配合使用时却无法实现。 我的字典有键和值,它们是包含两个值的列表:Name和URL。例如 我用这个函数映射到我的导航链接 虽然这适用于我的按钮映射,当我尝试使用NavLink时,我得到了这个奇怪的错误,我没有得到与按钮相同的确切代码 有人知道为什么会发生这种情况,以及我如何

  • 问题内容: 按值从字典中删除某项的最佳方法是什么,即当该项的键未知时?这是一个简单的方法: 有更好的方法吗?迭代字典时从字典中进行变异(删除项目)有什么问题吗? 问题答案: 请注意,您当前正在测试对象的身份(仅当两个操作数由内存中的同一对象表示时才返回- 与相等的两个对象并不总是这样)。如果您故意这样做,则可以将代码重写为 但这可能无法满足您的要求: 因此,您可能想要代替。

  • 我试图在我的Angular2应用程序中使用RouteConfig。现在,我似乎找不到我做错了什么。 我的应用程序组件正在使用路由器插座,但它不工作。 我已经创建了一个主。引导我的应用程序的ts文件: 主要的ts 应用程序组件 当一个用户输入地址:localhost:3000或localhost:3000/amendment,它应该加载AmendmentComponent组件,但什么都没发生,我可以

  • 问题内容: 我试图找出最好的方式来添加值到这是一个在。我想建立一个按联系人名字的首字母排序的联系人字典。例如[A:[Aaron,Adam等…],B:[Brian,Brittany等],…] 我发现此功能: 并尝试在循环中使用它: 但是当我尝试使用它时,它用一个新数组替换了现有数组。我知道我可以手动检查字典中的键是否存在,如果存在,则检索数组,然后附加一个新值,否则添加新的键/值对,但是我不确定Sw