2016-02-23 46 views
1

我是Python开发新手。下面是我的测试代码:如何从Python 3中的字典列表中获取键和值对

my_dict = [{'IS_DUMMY': False, 'FACT_CURRENCY': '$', 'RETAILER_NAME': 'kohls', 'RETAILER_KEY': 5, 'ACTIVE': 'Y'},{'IS_DUMMY': False, 'FACT_CURRENCY': '$', 'RETAILER_NAME': 'target', 'RETAILER_KEY': 100, 'ACTIVE': 'Y'}] 

column_list = [{'SOURCE_COLUMN':'FACT_CURRENCY', 'TARGET_COLUMN':'CURRENCY'},{'SOURCE_COLUMN':'RETAILER_NAME', 'TARGET_COLUMN':'RETAILER'}, 
{'SOURCE_COLUMN':'RETAILER_KEY', 'TARGET_COLUMN':'KEY'},{'SOURCE_COLUMN':'ACTIVE', 'TARGET_COLUMN':'ACTIVE'}] 

这里是我的问题:1, 我需要找到如果SOURCE_COLUMN从column_list中的值是my_dict可用(我能找到) 2。我需要创建一个dict列表,其中只包含来自my_dict中column_list的匹配值。所以我的新字典的名单看起来象下面这样:

my_new_dict = [{'FACT_CURRENCY': '$', 'RETAILER_NAME': 'kohls', 'RETAILER_KEY': 5, 'ACTIVE': 'Y'},{'FACT_CURRENCY': '$', 'RETAILER_NAME': 'target', 'RETAILER_KEY': 100, 'ACTIVE': 'Y'}] 

回答

1

为了让您的问题更具可读性,你应该把代码放在多余的线条,并通过4个空格缩进他们,就像这样:

# your data: 
my_dicts = [{'IS_DUMMY': False, 'FACT_CURRENCY': '$', 'RETAILER_NAME': 'kohls', 'RETAILER_KEY': 5, 'ACTIVE': 'Y'},{'IS_DUMMY': False, 'FACT_CURRENCY': '$', 'RETAILER_NAME': 'target', 'RETAILER_KEY': 100, 'ACTIVE': 'Y'}] 
column_list = [{'SOURCE_COLUMN':'FACT_CURRENCY', 'TARGET_COLUMN':'CURRENCY'},{'SOURCE_COLUMN':'RETAILER_NAME', 'TARGET_COLUMN':'RETAILER'}, {'SOURCE_COLUMN':'RETAILER_KEY', 'TARGET_COLUMN':'KEY'},{'SOURCE_COLUMN':'ACTIVE', 'TARGET_COLUMN':'ACTIVE'}] 

# seems like we only need the SOURCE_COLUMN entries from the column_list 
source_cols = [col['SOURCE_COLUMN'] for col in column_list] 

# iterate over my_dicts and create a new dictionary for each my_dict using 
new_dicts = [] 
for my_dict in my_dicts: 
    new_dicts.append({col:my_dict[col] for col in source_cols if col in my_dict}) 

另请参阅PEP 274 -- Dict Comprehensions

+0

非常感谢! – Pradeep

0

使new_dicts将通过列表理解的另一种方式:

new_dicts = [{col:my_dict[col] for col in source_cols if col in my_dict} for my_dict in my_dicts] 

如果你喜欢Shubit的回答,请考虑投它:)

+0

new_dicts.append({col ['SOURCE_COLUMN']:my_dict [col ['TARGET_COLuUMN'] for col in column_list if col ['TARGET_COLUMN'] in my_dict}) – Shubit

+0

@ k-menyah您可以使用list comprehension,但为了可读性我宁愿不要,即使如此,我喜欢这个紧凑的语法:) – Shubit

+0

谢谢。有没有什么办法可以在新字典中的column_list中使用目标列更新源列? @Shubit – Pradeep

相关问题