根据特定键的值条件从字典中导出键值对

Posted

技术标签:

【中文标题】根据特定键的值条件从字典中导出键值对【英文标题】:Exporting key value pairs from a dict based on conditionals of values for specific keys 【发布时间】:2020-01-01 07:08:20 【问题描述】:

我正在尝试根据嵌套字典中特定键的值从字典字典中过滤键值对。这是我到目前为止的代码:

current_sheet = 
four_feet_wide = []


for i in range(sheet.nrows):
    if i >= 1:
        part,height,width,sq,weight,wide,laps = sheet.row_values(i)
        current_sheet[part] = 
        'Max Height':height,
        'Max Width':width,
        'Laps':laps
        

    for k,v in current_sheet.items(): 
        if width == 4.00:
            four_feet_wide.append(part)


pprint.pprint(current_sheet)
print(four_feet_wide)

这是dicts的dict:

'WLI-1-201': 'Laps': 1.0, 'Max Height': 8.2, 'Max Width': 4.0,
 'WLI-1-202': 'Laps': 2.0, 'Max Height': 8.83, 'Max Width': 4.0,
 'WLI-1-203': 'Laps': 2.0, 'Max Height': 9.47, 'Max Width': 4.0,
 'WLI-1-204': 'Laps': 1.0, 'Max Height': 2.0, 'Max Width': 3.43,
 'WLI-2-205': 'Laps': 1.0, 'Max Height': 2.0, 'Max Width': 3.33,
 'WLI-2-206': 'Laps': 2.0, 'Max Height': 10.0, 'Max Width': 4.0,
 'WLI-2-207': 'Laps': 2.0, 'Max Height': 10.0, 'Max Width': 4.0,
 'WLI-2-208': 'Laps': 2.0, 'Max Height': 10.0, 'Max Width': 4.0,
 'WLI-2-209': 'Laps': 1.0, 'Max Height': 2.0, 'Max Width': 3.33,
 'WLI-3-210': 'Laps': 1.0, 'Max Height': 2.0, 'Max Width': 3.44,
 'WLI-3-211': 'Laps': 2.0, 'Max Height': 9.47, 'Max Width': 4.0,
 'WLI-3-212': 'Laps': 2.0, 'Max Height': 8.83, 'Max Width': 4.0,
 'WLI-3-213': 'Laps': 1.0, 'Max Height': 8.19, 'Max Width': 4.0

这是它的输出:

['WLI-1-201', 'WLI-1-202', 'WLI-1-202', 'WLI-1-203', 'WLI-1-203', 'WLI-1-203', 'WLI-2-206',  

'WLI-2-207', 'WLI-2-207', 'WLI-2-207', 'WLI-2-207', 'WLI-2-207', 'WLI-2-208', 'WLI-2-208', 

'WLI-2-208', 'WLI-2-208', 'WLI-2-208', 'WLI-2-208', 'WLI-2-208', 'WLI-2-208', 'WLI-3-211', 

'WLI-3-211', 'WLI-3-211', 'WLI-3-211', 'WLI-3-211', 'WLI-3-211', 'WLI-3-211', 'WLI-3-211', 

'WLI-3-211', 'WLI-3-211', 'WLI-3-211', 'WLI-3-212', 'WLI-3-212', 'WLI-3-212', 'WLI-3-212', 

'WLI-3-212', 'WLI-3-212', 'WLI-3-212', 'WLI-3-212', 'WLI-3-212', 'WLI-3-212', 'WLI-3-212', 

'WLI-3-212', 'WLI-3-213', 'WLI-3-213', 'WLI-3-213', 'WLI-3-213', 'WLI-3-213', 'WLI-3-213', 

'WLI-3-213', 'WLI-3-213', 'WLI-3-213', 'WLI-3-213', 'WLI-3-213', 'WLI-3-213', 'WLI-3-213']

正确的键被导出到列表中,但是如何消除重复并导出满足条件的每个键的值

【问题讨论】:

您是否只查找“最大宽度”== 4.0 的值? 【参考方案1】:

如果允许,使用 pandas:

>>> d= 'WLI-1-201': 'Laps': 1.0, 'Max Height': 8.2, 'Max Width': 4.0,
...  'WLI-1-202': 'Laps': 2.0, 'Max Height': 8.83, 'Max Width': 4.0,
...  'WLI-1-203': 'Laps': 2.0, 'Max Height': 9.47, 'Max Width': 4.0,
...  'WLI-1-204': 'Laps': 1.0, 'Max Height': 2.0, 'Max Width': 3.43,
...  'WLI-2-205': 'Laps': 1.0, 'Max Height': 2.0, 'Max Width': 3.33,
...  'WLI-2-206': 'Laps': 2.0, 'Max Height': 10.0, 'Max Width': 4.0,
...  'WLI-2-207': 'Laps': 2.0, 'Max Height': 10.0, 'Max Width': 4.0,
...  'WLI-2-208': 'Laps': 2.0, 'Max Height': 10.0, 'Max Width': 4.0,
...  'WLI-2-209': 'Laps': 1.0, 'Max Height': 2.0, 'Max Width': 3.33,
...  'WLI-3-210': 'Laps': 1.0, 'Max Height': 2.0, 'Max Width': 3.44,
...  'WLI-3-211': 'Laps': 2.0, 'Max Height': 9.47, 'Max Width': 4.0,
...  'WLI-3-212': 'Laps': 2.0, 'Max Height': 8.83, 'Max Width': 4.0,
...  'WLI-3-213': 'Laps': 1.0, 'Max Height': 8.19, 'Max Width': 4.0
...
>>> import pandas as pd
>>> df = pd.DataFrame(d).T
>>> 
>>> print(df)
           Laps  Max Height  Max Width
WLI-1-201   1.0        8.20       4.00
WLI-1-202   2.0        8.83       4.00
WLI-1-203   2.0        9.47       4.00
WLI-1-204   1.0        2.00       3.43
WLI-2-205   1.0        2.00       3.33
WLI-2-206   2.0       10.00       4.00
WLI-2-207   2.0       10.00       4.00
WLI-2-208   2.0       10.00       4.00
WLI-2-209   1.0        2.00       3.33
WLI-3-210   1.0        2.00       3.44
WLI-3-211   2.0        9.47       4.00
WLI-3-212   2.0        8.83       4.00
WLI-3-213   1.0        8.19       4.00
>>> 
>>> 
>>> v1 = df[df['Max Width'] == 4.00]
>>> print(v1)
           Laps  Max Height  Max Width
WLI-1-201   1.0        8.20        4.0
WLI-1-202   2.0        8.83        4.0
WLI-1-203   2.0        9.47        4.0
WLI-2-206   2.0       10.00        4.0
WLI-2-207   2.0       10.00        4.0
WLI-2-208   2.0       10.00        4.0
WLI-3-211   2.0        9.47        4.0
WLI-3-212   2.0        8.83        4.0
WLI-3-213   1.0        8.19        4.0
>>> 

获取键列表:

>>> print(v1.index.to_list())
['WLI-1-201', 'WLI-1-202', 'WLI-1-203', 'WLI-2-206', 'WLI-2-207', 'WLI-2-208', 'WLI-3-211', 'WLI-3-212', 'WLI-3-213']

获取键值对:

>>> print(v1.T.to_dict())  # to_dict() converts dataframe back to dictionary
'WLI-1-201': 'Laps': 1.0, 'Max Height': 8.2, 'Max Width': 4.0,
 'WLI-1-202': 'Laps': 2.0, 'Max Height': 8.83, 'Max Width': 4.0,
 'WLI-1-203': 'Laps': 2.0, 'Max Height': 9.47, 'Max Width': 4.0,
 'WLI-2-206': 'Laps': 2.0, 'Max Height': 10.0, 'Max Width': 4.0,
 'WLI-2-207': 'Laps': 2.0, 'Max Height': 10.0, 'Max Width': 4.0,
 'WLI-2-208': 'Laps': 2.0, 'Max Height': 10.0, 'Max Width': 4.0,
 'WLI-3-211': 'Laps': 2.0, 'Max Height': 9.47, 'Max Width': 4.0,
 'WLI-3-212': 'Laps': 2.0, 'Max Height': 8.83, 'Max Width': 4.0,
 'WLI-3-213': 'Laps': 1.0, 'Max Height': 8.19, 'Max Width': 4.0

【讨论】:

喜欢这个答案...只是想说您也可以在此处使用print(list(v1.T.values())) 仅获取值作为最终输出。【参考方案2】:
# suppose your dict of dict is stored in variable d
four_feet_wide=[]
for key,value in d.items():
    # put condition here
    if value['Max Width'] ==4.0:
        # adding filtered value to the list
        four_feet_wide.append(key)
        # printing values of dictionary along with key which matches criteria
        print(key,value)

上面一行代码可以写成下面这样

four_feet_wide = [key for key,value in d.items() if value['Max Width']==4.0]
print(four_feet_wide)

【讨论】:

【参考方案3】:
# Set to eliminate duplicates
four_feet_wide = set(four_feet_wide)
# Get values for each key in the set
values = [current_sheet[k] for k in four_feet_wide] # or
values = list(current_sheet.values())

print(values)

您还可以将four_feet_wide 初始化为一个集合,这样它就不会添加重复项:

four_feet_wide = set()
...
four_feet_wide.add(part)

【讨论】:

以上是关于根据特定键的值条件从字典中导出键值对的主要内容,如果未能解决你的问题,请参考以下文章

如何从字典列表中向现有键值对添加新的键值对?

python字典的操作总结

HashMapHashTableConcurrentHashMap详解

Python ❀ 字典

Python ❀ 字典

Redis之字典