我们说,我有一个如下词典
dik = {
"dir1": {},
}
我有兴趣从一个键的值递归遍历字典到另一个键的值。
# assume `dik` as global variable
def travel():
curr = dik
for i in ["dir1", "dir2"]:
if i in curr:
curr = curr[i]
else:
curr[i] = {}
我希望旅行功能将dik
设为
dik = {
"dir1": {
"dir2": {}
},
}
答案 0 :(得分:2)
我正在做一些快速测试。 (行为应该是你所描述的,我相信)
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="UnitPU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>co.com.prueba.modelo.Person</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
<property name="javax.persistence.jdbc.user" value="user"/>
<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/>
<property name="javax.persistence.jdbc.password" value="1234"/>
</properties>
<mapping-file>META-INF/orm1.xml</mapping-file>
<mapping-file>META-INF/orm1.xml</mapping-file>
</persistence-unit>
答案 1 :(得分:0)
由于字典的可变性,即使使用了函数,这也可以正常工作。
>>> dik = {
"dir1": {},
"dir2": {
"dir3": {},
"dir4": {
"dir5": {}
}
}
}
>>> print dik
{'dir2': {'dir3': {}, 'dir4': {'dir5': {}}}, 'dir1': {}}
>>> def change(d, key, val):
d[key] = val
此函数接受任何字典,并使用值&#39; val&#39;设置或创建密钥。你可以传递嵌套的词典,它可以很好地访问它们,它将反映在全局dik中。
>>> change(dik['dir2']['dir3'], "file", "Some text")
>>> print dik
{'dir2': {'dir3': {'file': 'Some text'}, 'dir4': {'dir5': {}}}, 'dir1': {}}
请注意,如果您在函数中使用引用(例如curr = dik
),它仍然有效,因为它只是告诉Python将它们视为同一个东西,它实际上并没有单独复制。