如何在Python中引用字典中的键

时间:2015-05-28 16:43:20

标签: python dictionary

我们说,我有一个如下词典

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": {}
    },
}

2 个答案:

答案 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将它们视为同一个东西,它实际上并没有单独复制。