Python Forum
dictionary: print key/value with list(dict) comprehension
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
dictionary: print key/value with list(dict) comprehension
#1
so i have this...

options = {"attr1":"val1","attr2":"val2"} for opts in list(options.keys()): print(opts + " " + "=" + " " + options[opts])
how to do this in one line..
for example:
val = [ some comprehension magic]
print(val)
Reply
#2
print(list(options.values()))

That said,
your code can be simplified to
options = {"attr1":"val1","attr2":"val2"} for key, value in options.items(): print('{} = {}'.format(key, value))
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply
#3
ähmm..no

desired out -> attr2 = val2 attr1 = val1 what it actually print -> ['val2', 'val1']
and i need a oneliner like "var =". i dont know how to use a a for loop in a variable.
Reply
#4
maybe I misunderstood what you want
(Nov-14-2018, 02:53 PM)wardancer84 Wrote: val = [ some comprehension magic]
print(val)
i.e. I thought you want just the values
is that ok:
print('\n'.join(['{} = {}'.format(key, value) for key, value in oprions.items()]))
in python 3.6+
print('\n'.join([f'{key} = {value}' for key, value in oprions.items()]))
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply
#5
ok here is the full magic...i am trying to build an ansible module which receives atrributes in the following formats in a dcit.

attr=val,attr=val,and so on

i need to use the key/value pairs to write them to a config file in the following format.

bla:
attr = val
attr = val


#!/usr/bin/python # -*- coding: utf-8 -*- from __future__ import absolute_import, division, print_function __metaclass__ = type ANSIBLE_METADATA = { 'metadata_version': '1.1', 'status': ['preview'], 'supported_by': 'community' } DOCUMENTATION = ''' --- module: aix_stanza short_description: modify aix stanza files version_added: "0.1" description: - "adds stanza lines/addr/value pairs, changes attr/value pairs, removes stanzas/attr/value pairs" options: path: description: - Path to the stanza file required: true stanza: description: - name of add_stanza required: true options: description: - comman separated key/value pairs (key=val,key=val,...) backup: description: - Create a backup file including the timestamp information so you can get the original file back if you somehow clobbered it incorrectly. type: bool default: 'no' state: description: - If set to C(absent) the stanza will be removed if present instead of created. choices: [ absent, present ] default: present others: description: - All arguments accepted by the M(file) module also work here extends_documentation_fragment: - files author: - Christian Tremel (@flynn1973) ''' EXAMPLES = ''' - name: add ldap user stanza aix_stanza: path: /etc/security/user stanza: exampleuser options: SYSTEM=LDAP,registry=LDAP state: present mode: 0644 backup: yes - name: add filesystem entry aix_stanza: path: /etc/filesystems stanza: /examplemount options: dev=/dev/lvosystem_c,vfs=jfs2,log=INLINE,mount=true state: present backup: yes ''' import os import re import tempfile import traceback from ansible.module_utils.basic import * def match_option(option, line): option = re.escape(option) return re.match('( |\t)*%s( |\t)*(=|$)' % option, line) \ or re.match('#( |\t)*%s( |\t)*(=|$)' % option, line) \ or re.match(';( |\t)*%s( |\t)*(=|$)' % option, line) def match_active_option(option, line): option = re.escape(option) return re.match('( |\t)*%s( |\t)*(=|$)' % option, line) def match_stanza(stanza, line): stanza = re.escape(stanza) return re.match('^%s:[^:]*(?=[\s])' % stanza, line) def do_stanza(module, filename, stanza=None, options=None, state='present', backup=False, create=True): diff = dict( before='', after='', before_header='%s (content)' % filename, after_header='%s (content)' % filename, ) if not os.path.exists(filename): if not create: module.fail_json(rc=257, msg='Destination %s does not exist !' % filename) destpath = os.path.dirname(filename) if not os.path.exists(destpath) and not module.check_mode: os.makedirs(destpath) stanza_lines = [] else: stanza_file = open(filename, 'r') try: stanza_lines = stanza_file.readlines() finally: stanza_file.close() if module._diff: diff['before'] = ''.join(stanza_lines) changed = False # ini file could be empty if not stanza_lines: stanza_lines.append('\n') # last line should always be a newline to keep up with POSIX standard if stanza_lines[-1] == "" or stanza_lines[-1][-1] != '\n': stanza_lines[-1] += '\n' changed = True if not stanza: module.fail_json(msg="stanza name not set", rc=rc, err=err) stanza_format = '\n%s\n' option_format = '\t%s = %s\n' for index, line in enumerate(stanza_lines): if line.startswith('%s:' % stanza): within_stanza = True stanza_start = index if within_stanza: if state == 'present': # insert missing option line at the end of the section for i in range(index, 0, -1): # search backwards for previous non-blank or non-comment line if not re.match(r'^[ \t]*([#;].*)?$', stanza_lines[i - 1]): stanza_lines.insert(i, option_format % (options, value)) msg = 'options added' changed = True break elif state == 'absent' and not options: # remove the entire stanza del stanza_lines[stanza_start:index] msg = 'stanza removed' changed = True break else: if within_stanza and options: if state == 'present': # change the existing option line if match_option(options, line): newline = option_format % (options, value) option_changed = stanza_lines[index] != newline changed = changed or option_changed if option_changed: msg = 'option changed' stanza_lines[index] = newline if option_changed: # remove all possible option occurrences from the stanza index = index + 1 while index < len(stanza_lines): line = stanza_lines[index] if match_active_option(options, line): del stanza_lines[index] else: index = index + 1 break elif state == 'absent': # delete the existing line if match_active_option(options, line): del stanza_lines[index] changed = True msg = 'option changed' break if not within_stanza and option and state == 'present': stanza_lines.append('\n%s:\n' % stanza) stanza_lines.append(assignment_format % (options, value)) changed = True msg = 'stanza and option added' if module._diff: diff['after'] = ''.join(stanza_lines) backup_file = None if changed and not module.check_mode: if backup: backup_file = module.backup_local(filename) try: tmpfd, tmpfile = tempfile.mkstemp(dir=module.tmpdir) f = os.fdopen(tmpfd, 'w') f.writelines(stanza_lines) f.close() except IOError: module.fail_json(msg="Unable to create temporary file %s", traceback=traceback.format_exc()) try: module.atomic_move(tmpfile, filename) except IOError: module.ansible.fail_json(msg='Unable to move temporary file %s to %s, IOError' % (tmpfile, filename), traceback=traceback.format_exc()) return (changed, backup_file, diff, msg) def main(): module = AnsibleModule( argument_spec=dict( path=dict(type='path', required=True, aliases=['dest']), stanza=dict(type='str', required=True), options=dict(type='dict'), backup=dict(type='bool', default=False), state=dict(type='str', default='present', choices=['absent', 'present']), create=dict(type='bool', default=True) ), add_file_common_args=True, supports_check_mode=True, ) path = module.params['path'] stanza = module.params['stanza'] options = module.params['options'] state = module.params['state'] backup = module.params['backup'] create = module.params['create'] (changed, backup_file, diff, msg) = do_stanza(module, path, stanza, options, state, backup, create) if not module.check_mode and os.path.exists(path): file_args = module.load_file_common_arguments(module.params) changed = module.set_fs_attributes_if_different(file_args, changed) results = dict( changed=changed, diff=diff, msg=msg, path=path, ) if backup_file is not None: results['backup_file'] = backup_file # Mission complete module.exit_json(**results) if __name__ == '__main__': main()
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  List comprehension not working right Cris9855 3 1,707 Nov-04-2024, 03:46 PM
Last Post: DeaD_EyE
  Problem with List Comprehension in Python laurawoods 3 1,972 Aug-12-2024, 06:26 AM
Last Post: Pedroski55
  Sort a list of dictionaries by the only dictionary key Calab 2 2,235 Apr-29-2024, 04:38 PM
Last Post: Calab
  List Comprehension Issue johnywhy 5 3,084 Jan-14-2024, 07:58 AM
Last Post: Pedroski55
  Dictionary in a list bashage 2 2,210 Dec-27-2023, 04:04 PM
Last Post: deanhystad
  filtering a list of dictionary as per given criteria jss 5 3,081 Dec-23-2023, 08:47 AM
Last Post: Gribouillis
Question mypy unable to analyse types of tuple elements in a list comprehension tomciodev 1 2,727 Oct-17-2023, 09:46 AM
Last Post: tomciodev
  How do you get Python to print just one value in a list? 357mag 3 3,065 May-17-2023, 09:52 PM
Last Post: rob101
  How to add list to dictionary? Kull_Khan 3 2,510 Apr-04-2023, 08:35 AM
Last Post: ClaytonMorrison
  Using list comprehension with 'yield' in function tester_V 5 5,083 Apr-02-2023, 06:31 PM
Last Post: tester_V

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020
This forum uses Lukasz Tkacz MyBB addons.
Forum use Krzysztof "Supryk" Supryczynski addons.