Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Clear category for YAML. More Types by Oleg_Levonjuk
# Taken from mission YAML. Simple Dict
import re
def yaml(a):
obj = {}
line_pattern = re.compile(r'[A-Za-z0-9]+: [ A-Za-z0-9]+')
num_pattern = re.compile(r'^[0-9]+$')
for line in a.split('\n'):
if re.match(line_pattern, line):
key, val = line.split(': ')
obj[key] = int(val) if re.match(num_pattern, val) else val
return obj
if __name__ == '__main__':
print("Example:")
print(yaml("""name: Alex
age: 12"""))
# These "asserts" are used for self-checking and not for an auto-testing
assert yaml("""name: Alex
age: 12""") == {'age': 12, 'name': 'Alex'}
assert yaml("""name: Alex Fox
age: 12
class: 12b""") == {'age': 12,
'class': '12b',
'name': 'Alex Fox'}
print("Coding complete? Click 'Check' to earn cool rewards!")
def yaml(a):
def parse_val(val):
num_pattern = re.compile(r'^[0-9]+$')
bool_pattern = re.compile(r'^(true|false)$')
quoted_pattern = re.compile(r'^".*"$')
if re.match(num_pattern, val):
return int(val)
if val == '' or val == 'null':
return None
if re.match(bool_pattern, val):
return val == 'true'
return (val[1:-1] if re.match(quoted_pattern, val) else val).replace('\\"', '"')
obj = {}
line_pattern = re.compile(r'[A-Za-z0-9]+:( [ "A-Za-z0-9]+)?')
for line in a.split('\n'):
if re.match(line_pattern, line):
key, val = line.split(':')
obj[key] = parse_val(val.strip())
return obj
if __name__ == '__main__':
print("Example:")
print(yaml('name: Alex\nage: 12'))
# These "asserts" are used for self-checking and not for an auto-testing
assert yaml('name: Alex\nage: 12') == {'age': 12, 'name': 'Alex'}
assert yaml('name: Alex Fox\n'
'age: 12\n'
'\n'
'class: 12b') == {'age': 12,
'class': '12b',
'name': 'Alex Fox'}
assert yaml('name: "Alex Fox"\n'
'age: 12\n'
'\n'
'class: 12b') == {'age': 12,
'class': '12b',
'name': 'Alex Fox'}
assert yaml('name: "Alex \\"Fox\\""\n'
'age: 12\n'
'\n'
'class: 12b') == {'age': 12,
'class': '12b',
'name': 'Alex "Fox"'}
assert yaml('name: "Bob Dylan"\n'
'children: 6\n'
'alive: false') == {'alive': False,
'children': 6,
'name': 'Bob Dylan'}
assert yaml('name: "Bob Dylan"\n'
'children: 6\n'
'coding:') == {'children': 6,
'coding': None,
'name': 'Bob Dylan'}
assert yaml('name: "Bob Dylan"\n'
'children: 6\n'
'coding: null') == {'children': 6,
'coding': None,
'name': 'Bob Dylan'}
assert yaml('name: "Bob Dylan"\n'
'children: 6\n'
'coding: "null" ') == {'children': 6,
'coding': 'null',
'name': 'Bob Dylan'}
print("Coding complete? Click 'Check' to earn cool rewards!")
April 16, 2020
Comments: