根据特定键的值条件从字典中导出键值对
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)
【讨论】:
以上是关于根据特定键的值条件从字典中导出键值对的主要内容,如果未能解决你的问题,请参考以下文章