如何为 python AnyTree 模块获取逗号分隔的输入?

kib*_*hft 6 python list python-3.x anytree

社区。我需要接受多个以逗号分隔的输入来生成信息摘要(具体来说,每个小组/项目中有多少不同的员工参与)?该程序以字符串的形式获取员工、经理和团体。

\n

我正在使用anytree python 库来搜索/计算每个组中每个员工的出现次数。但是,该程序一次仅接受一个值/单元格,而不是多个值。

\n

这是树结构以及我如何接受输入值?

\n
Press q to exit, Enter your data: Joe\nPress q to exit, Enter your data: Manager1\nPress q to exit, Enter your data: Group1\nPress q to exit, Enter your data: Charles \nPress q to exit, Enter your data: Manager1\nPress q to exit, Enter your data: Group2\nPress q to exit, Enter your data: Joe\nPress q to exit, Enter your data: Manager3\nPress q to exit, Enter your data: Group1\nPress q to exit, Enter your data: Charles\nPress q to exit, Enter your data: Manager3\nPress q to exit, Enter your data: Group1\nPress q to exit, Enter your data: Joe\nPress q to exit, Enter your data: Manager5\nPress q to exit, Enter your data: Group2\nPress q to exit, Enter your data: q\nEmployee   No of groups\n   JOE       2\n   CHARLES       2\nGroup\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 GROUP1\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 JOE\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 MANAGER1\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 JOE\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 MANAGER3\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 CHARLES\n\xe2\x94\x82       \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 MANAGER3\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 GROUP2\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CHARLES\n    \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 MANAGER1\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 JOE\n        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 MANAGER5\n
Run Code Online (Sandbox Code Playgroud)\n

我需要此代码的帮助,以便它可以接受逗号分隔的值;例如,一次输入Joe、Manager1、Group1 。

\n
import anytree\n\nfrom anytree import Node, RenderTree, LevelOrderIter, LevelOrderGroupIter, PreOrderIter\n\nimport sys\n\n# user input\nio=''\nlst_input = []\nwhile (io!='q'):\n    io=input('Press q to exit, Enter your data: ')\n    if io!='q':\n        lst_input.append(io.upper())\n\n# change list in to matrix\nlst=[]\nfor i in range(0, len(lst_input), 3):\n    lst.append(lst_input[i:i + 3])\n\nlst\n\n# create tree structure from lst\ngroup = Node('Group')\nstoreGroup = {}\nfor i in range(len(lst)):\n    if lst[i][2] in [x.name for x in group.children]: # parent already exist, append childrens\n        storeGroup[lst[i][0]] = Node(lst[i][0], parent=storeGroup[lst[i][2]])\n        storeGroup[lst[i][1]] = Node(lst[i][1], parent=storeGroup[lst[i][0]])\n    else: # create parent and append childreds\n        storeGroup[lst[i][2]] = Node(lst[i][2], parent=group)\n        storeGroup[lst[i][0]] = Node(lst[i][0], parent=storeGroup[lst[i][2]])\n        storeGroup[lst[i][1]] = Node(lst[i][1], parent=storeGroup[lst[i][0]])\n\n\nstore = {}\nfor children in LevelOrderIter(group, maxlevel=3):\n    if children.parent!=None and children.parent.name!='Group':\n        if children.name not in store:\n            store[children.name] = {children.parent.name}\n        else:\n            store[children.name] = store[children.name] | {children.parent.name}\n\nprint('Employee', '  No of groups')\nfor i in store:\n    print('   '+i+'      ', len(store[i]))\n\n\nfor pre,fill, node in RenderTree(group):\n    print('{}{}'.format(pre,node.name))\n
Run Code Online (Sandbox Code Playgroud)\n


谢谢你!欢迎任何想法。

\n

小智 5

利用拆包来提取元素。那么if语句可以这样重写。

if io!='q':
    name, role, grp = io.upper(). split(',')
    lst_input.append([name,role, grp]) 
Run Code Online (Sandbox Code Playgroud)

您还需要lst.append(lst_input[i:i + 3])将 for 循环更改为此。

lst.append(lst_input[0][i:i + 3])
Run Code Online (Sandbox Code Playgroud)