简体   繁体   中英

Python convert named string fields to tuple

Similar to this question: Tuple declaration in Python

I have this function:

def get_mouse():
    # Get: x:4631 y:506 screen:0 window:63557060
    mouse = os.popen( "xdotool getmouselocation" ).read().splitlines()
    print mouse
    return mouse

When I run it it prints:

['x:2403 y:368 screen:0 window:60817757']

I can split the line and create 4 separate fields in a list but from Python code examples I've seen I feel there is a better way of doing it. I'm thinking something like x:= or window:= , etc.

I'm not sure how to properly define these "named tuple fields" nor how to reference them in subsequent commands?

I'd like to read more on the whole subject if there is a reference link handy.

try

dict(mouse.split(':') for el in mouse

This should give you a dict (rather than tuples, though dicts are mutable and also required hashability of keys)

{x: 2403, y:368, ...}

Also the splitlines is probably not needed, as you are only reading one line. You could do something like:

mouse = [os.popen( "xdotool getmouselocation" ).read()]

Though I don't know what xdotool getmouselocation does or if it could ever return multiple lines.

It seems it would be a better option to use a dictionary here. Dictionaries allow you to set a key, and a value associated to that key. This way you can call a key such as dictionary['x'] and get the corresponding value from the dictionary (if it exists!)

data = ['x:2403 y:368 screen:0 window:60817757'] #Your return data seems to be stored as a list
result = dict(d.split(':') for d in data[0].split()) 

result['x']
#'2403'
result['window']
#'60817757'

You can read more on a few things here such as;

Comprehensions

Dictionaries

Happy learning!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM