单列表解析来解包嵌套字典

时间:2015-06-01 17:39:10

标签: python list-comprehension

我想转此

a = {'a': {'b': 'b aw', 'c': 'c aw'}, 'b': {'b': 'b2 aw', 'c': 'c2 aw'}, 'c': {}}

进入这个

['b aw', 'c aw', 'b2 aw', 'c2 aw']

列表理解。我想我需要一些方法来表达这种表达方式'

;

a2 = [a1 for a1 in a.values().values()]

我不想要dict(a.values)因为那只会让我回到原来的字典,a。我知道有很多方法可以用for循环来做到这一点,但有没有办法在没有for循环的情况下做到这一点?感谢。

3 个答案:

答案 0 :(得分:2)

你需要循环你的dict值的值:

>>> [i for j in a.values() for i in j.values()]
['c aw', 'b aw', 'c2 aw', 'b2 aw']

答案 1 :(得分:1)

制作原始Exception in thread "main" <openjpa-2.4.0-nonfinal-1598334-r422266:1599166 fatal user error> org.apache.openjpa.persistence.ArgumentException: The persistence provider is attempting to use properties in the persistence.xml file to resolve the data source. A Java Database Connectivity (JDBC) driver or data source class name must be specified in the openjpa.ConnectionDriverName or javax.persistence.jdbc.driver property. The following properties are available in the configuration: "org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl@442ce698". at org.apache.openjpa.jdbc.schema.DataSourceFactory.newDataSource(DataSourceFactory.java:72) at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.createConnectionFactory(JDBCConfigurationImpl.java:849) at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getDBDictionaryInstance(JDBCConfigurationImpl.java:602) at org.apache.openjpa.jdbc.meta.MappingRepository.endConfiguration(MappingRepository.java:1518) at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:535) at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:460) at org.apache.openjpa.lib.conf.PluginValue.instantiate(PluginValue.java:121) at org.apache.openjpa.conf.MetaDataRepositoryValue.instantiate(MetaDataRepositoryValue.java:68) at org.apache.openjpa.lib.conf.ObjectValue.instantiate(ObjectValue.java:83) at org.apache.openjpa.conf.OpenJPAConfigurationImpl.newMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:967) at org.apache.openjpa.conf.OpenJPAConfigurationImpl.getMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:958) at org.apache.openjpa.kernel.AbstractBrokerFactory.makeReadOnly(AbstractBrokerFactory.java:642) at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:202) at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:155) at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:226) at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:153) at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:59) at pruebaMain.main(pruebaMain.java:10) 表达式

的方法
values
合法,就像这样:

[a1 for a1 in a.values().values()]

说明:内部列表是列表列表 - 与每个值对应的值。 import itertools itertools.chain.from_iterable([v.values() for v in a.values()]) 使它变平。

答案 2 :(得分:0)

你可以这样做:

a = {'a': {'b': 'b aw', 'c': 'c aw'}, 'b': {'b': 'b2 aw', 'c': 'c2 aw'}, 'c': {}}    
a2 = [a1 for a1 in a.values()]
a3 = [a3.values() for a3 in a2]
a3.sort()