我正在尝试创建一个包含属于linux组的所有用户的扁平列表
从grp.getgrall()
返回的结构是:
[
grp.struct_group(
gr_name='plugdev',
gr_passwd='x',
gr_gid=46,
gr_mem=[
'rolf',
'public'
])
]
该组成员采用gr_mem=[]
我可以使用以下内容:
import grp
plugdev_members = []
for group in grp.getgrall():
if "plugdev" in group.gr_name:
for user in group.gr_mem:
plugdev_members.append(user)
返回一个单位列表:
['rolf','public']
使用列表理解:
plugdev_members = [
mem for mem in [
m.gr_mem for m in grp.getgrall()
if "plugdev" in m.gr_name
]
]
or
plugdev_members = [
m.gr_mem for m in grp.getgrall()
if "plugdev" in m.gr_name
]
我在列表中得到一个列表:
[['rolf', 'public']]
我确信必须有一种方法可以使用列表理解返回拼合列表,我只是没有看到它。我知道我需要在第一个循环中使用第二个循环,根据第一个示例,但我没有做到正确。
任何提示将不胜感激
答案 0 :(得分:1)
你在第一个循环中缺少第二个循环:
plugdev_members = [m.gr_mem for m in grp.getgrall() if "plugdev" in m.gr_name]
# ^----- This is a list, so pugdev_members will be a list of lists
相反:
plugdev_members = [x for m in grp.getgrall() for x in m.gr_mem if "plugdev" in m.gr_name]