有这个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()
从该可迭代对象中获取下一个值。
您还必须next
在while
循环中重命名变量。使用该功能替换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