首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于特定键值的条件从字典中导出键值对

基于特定键值的条件从字典中导出键值对
EN

Stack Overflow用户
提问于 2020-01-01 15:08:20
回答 3查看 87关注 0票数 0

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

代码语言:javascript
复制
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的判词:

代码语言:javascript
复制
{'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}}

下面是它输出的内容:

代码语言:javascript
复制
['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']

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-01-01 15:20:53

如果允许,请使用熊猫:

代码语言:javascript
复制
>>> 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
>>> 

获取密钥列表:

代码语言:javascript
复制
>>> 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']

要获取键-值对:

代码语言:javascript
复制
>>> 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}}
票数 1
EN

Stack Overflow用户

发布于 2020-01-01 15:18:57

代码语言:javascript
复制
# 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初始化为一个集合,这样它就不会添加重复项:

代码语言:javascript
复制
four_feet_wide = set()
...
four_feet_wide.add(part)
票数 0
EN

Stack Overflow用户

发布于 2020-01-01 15:22:57

代码语言:javascript
复制
# 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)

在上面一行中,代码可以写成如下所示

代码语言:javascript
复制
four_feet_wide = [key for key,value in d.items() if value['Max Width']==4.0]
print(four_feet_wide)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59550617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档